【问题标题】:Raise command line argument string/size limit (ARG_MAX) Mac OSX提高命令行参数字符串/大小限制 (ARG_MAX) Mac OSX
【发布时间】:2018-06-09 10:24:38
【问题描述】:

我有一个节点脚本,我将一个大的 json 流作为命令行 arg 传入。值得注意的是,我正在运行 Mac OSX High Sierra

由于此错误,脚本无法运行:

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

阅读后,这是导致我在 ARG_MAX 或 MAX_ARG_STRLEN 中的限制 根据https://www.in-ulm.de/~mascheck/various/argmax/

我试图在/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/syslimits.h/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/syslimits.h 的配置文件中提高这些限制

这是我从(256 * 1024) 提高ARG_MAX 大小并添加了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 大小溢出引起的(有什么区别?)无论哪种方式我都没有找到让它工作的方法

【问题讨论】:

  • 我不熟悉/usr/local/bin/node,但很可能有另一种调用它的方法,避免在命令行上传递长参数。
  • 你可能是对的。我有一个运行节点脚本的 bash 脚本。因此,我将 bash 脚本中的数据传递到节点脚本中,不确定是否有其他方法可以做到这一点
  • 改用文件并传递其名称
  • @Goldfish 我建议检查一下是否可以像 Diego 建议的那样将长参数作为文件传递,或者作为标准输入传递,无论哪种方式都可以避免长参数限制。

标签: linux bash arguments environment-variables


【解决方案1】:

这些值不能在 Mac OS X 内核中更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 2012-02-25
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多