2017-12-28 10 views
0

노드 스크립트가 있습니다 커맨드 라인 인수로 큰 json 스트림을 전달합니다.명령 줄 인수 문자열/크기 제한 (ARG_MAX) 늘리기 Mac OSX

읽기시

-bash: /usr/local/bin/node: Argument list too long

, 이것은 따라 ARG_MAX 또는 MAX_ARG_STRLEN 내 한계를 발생 : 내가

스크립트는이 오류로 인해 실행할 수 없습니다 맥 OSX 높은 시에라을 실행하고 주목할 필요가 https://www.in-ulm.de/~mascheck/various/argmax/

에 내가 여기에 config 파일 여기 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/syslimits.h

이러한 한계를 높이기 위해 시도하는 것은 인터넷의 한 부분입니다 내가 크기를 (256 * 1024)에서 제기 한 후 MAX_ARG_STRLEN 구성을 추가했습니다.

#define ARG_MAX  (512 * 1024) /* max bytes for an exec function */ 
#define MAX_ARG_STRLEN (PAGE_SIZE * 64) 
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 
#define CHILD_MAX   266 /* max simultaneous processes */ 
#define GID_MAX  2147483647U /* max value for a gid_t (2^31-2) */ 
#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */ 
#define LINK_MAX  32767 /* max file link count */ 
#define MAX_CANON  1024 /* max bytes in term canon input line */ 
#define MAX_INPUT  1024 /* max bytes in terminal input */ 
#define NAME_MAX   255 /* max bytes in a file name */ 
#define NGROUPS_MAX  16 /* max supplemental group id's */ 
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 
#define UID_MAX  2147483647U /* max value for a uid_t (2^31-2) */ 

#define OPEN_MAX  10240 /* max open files per process - todo, make a config option? */ 

#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */ 
#define PATH_MAX   1024 /* max bytes in pathname */ 
#define PIPE_BUF   512 /* max bytes for atomic pipe writes */ 

#define BC_BASE_MAX  99 /* max ibase/obase values in bc(1) */ 
#define BC_DIM_MAX  2048 /* max array elements in bc(1) */ 
#define BC_SCALE_MAX   99 /* max scale value in bc(1) */ 
#define BC_STRING_MAX  1000 /* max const string length in bc(1) */ 
#define CHARCLASS_NAME_MAX  14 /* max character class name size */ 
#define COLL_WEIGHTS_MAX  2 /* max weights for order keyword */ 
#define EQUIV_CLASS_MAX   2 
#define EXPR_NEST_MAX   32 /* max expressions nested in expr(1) */ 
#define LINE_MAX   2048 /* max bytes in an input line */ 
#define RE_DUP_MAX  255 /* max RE's in interval notation */ 

#if __DARWIN_UNIX03 
#define NZERO    20 /* default priority [XSI] */ 
        /* = ((PRIO_MAX - PRIO_MIN)/2) + 1 */ 
        /* range: 0 - 39 [(2 * NZERO) - 1] */ 
        /* 0 is not actually used */ 
#else /* !__DARWIN_UNIX03 */ 
#define NZERO    0 /* default priority */ 
        /* range: -20 - 20 */ 
        /* (PRIO_MIN - PRIO_MAX) */ 
#endif /* __DARWIN_UNIX03 */ 
#endif /* !_ANSI_SOURCE */ 

#endif /* !_SYS_SYSLIMITS_H_ */ 

이러한 변경 후에는 330,000자를 포함하는 파일이 여전히 실패하고 있습니다. 노드 스크립트를 실행할 때 파일은 300kb입니다.

귀하의 전문성을 높이 평가합니다! 이것이 문자열 크기 또는 arg 크기의 오버플로에 의한 것인지 확신 할 수 없습니다 (차이점은 무엇입니까?) 어느 쪽이든 작동하게하는 방법을 찾지 못했습니다.

+1

나는'/ usr/local/bin/node'에 익숙하지 않지만 명령 행에서 긴 인수를 전달할 필요가없는 다른 방법으로 호출 할 가능성이 높습니다. – John1024

+0

당신이 옳을 수도 있습니다. 노드 스크립트를 실행하는 bash 스크립트가 있습니다. 이 때문에 나는 bash 스크립트에서 노드 스크립트로 데이터를 전달할 것입니다. 다른 방법이 있는지 확실하지 않습니다. – Goldfish

+2

파일을 대신 사용하고 이름을 전달하십시오. –

답변

1

이 값은 다음과 같이 변경할 수 없습니다. OSX 커널