gnome-terminal中命令行参数的最大长度是多少?


Answers:


32

xargs知道。在我的系统上

$ xargs --show-limits
Your environment variables take up 2572 bytes
POSIX upper limit on argument length (this system): 2092532
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2089960
Size of command buffer we are actually using: 131072

5
为了扩展这一点,限制不在终端中,而是在内核中(在外壳中也是如此),但我认为默认外壳(bash)的限制与内核限制一样高)。此外,xargs不仅要报告该限制,而且(主要是)要解决该限制-请参见手册页或其他文档。
吉尔斯(Gilles)“所以,别再邪恶了”,2010年

1
我喜欢这个答案,特别是因为“可以实际使用”输出...我已经花了些力气,并提出了这个命令变量来隔离“实际”值...(也许有一种更简单的方法,但嘿,它有效并且适合脚本:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O 2010年

奇怪的是,xargs似乎在POSIX限制中对环境限制进行了重复计算(POSIX限制= ARG_MAX-2048(净空)-envvars)。
东武

18

答案来自sysconfARG_MAX。要在您的系统上检查它:

getconf ARG_MAX

对我来说,这是报道2097152。有关更多详细信息,请查看联机帮助页:

man sysconf

要将其包含在程序中,例如:

#include <unistd.h>
...
printf("%ld\n", sysconf(_SC_ARG_MAX));

1
谢谢KC .. +1; 获得绝对MAX的一种巧妙方法,但是我更喜欢xargs方法,因为它具有“实际可用”的因素...因为我实际上是在运行时值之后使用的(但我没有提到:(
Peter .O 2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.