Linux 命令行字符限制

rob*_*dog 46 linux command-line-interface

我正在将变量传递给命令行上的脚本。命令的字符限制是多少?例如:

$ MyScript reallyreallyreally...reallyreallyreallylongoption
Run Code Online (Sandbox Code Playgroud)

谢谢。

Dav*_*ett 49

shell/OS 强加的限制通常是一到二十万个字符。

getconf ARG_MAX将为您提供命令的最大输入限制。在 Debian 系统上,我目前在返回时打开了一个终端,131072它是128*1024. 您的环境变量会减少限制,如果我没记错的话,这些会由 shell 以相同的结构传递,尽管在大多数情况下只会减少几百个字符。要找到此值的近似值,请运行env | wc -c- 这建议在当前时间在此计算机上登录时使用 325 个字符。

脚本可能会允许这种完整长度,但其他实用程序也不太可能有意或通过设计问题强加自己的限制。对于长命令行上的单个参数的长度和/或文件路径的长度,也可能存在人为限制。

  • 在我的系统上,`getconf ARG_MAX` 给出了 2097152,但我可以通过的最大 arg 长度仍然是 131071(而且我不必扣除环境的大小)。 (3认同)
  • 还要记住,在处理巨大的参数列表时,`xargs` 甚至 `find -exec` 都是你的朋友。 (2认同)

Rot*_*sor 20

ARG_MAX 确实限制了命令行和环境的总大小,但您面临一个额外的限制:一个参数不得长于 MAX_ARG_STRLEN(不幸的是,它被硬编码为 131072)。

请参阅https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument


小智 6

xargs提供了另一种方法来获取有关命令行长度限制的详细信息,包括系统的理论最大值、可用最大值、POSIX 指定的最小值以及当前缓冲区大小限制。

您可以通过不提供任何输入xargs并提供选项来完成此操作--show-limits。手册页还建议提供该--no-run-if-empty选项(GNU 扩展)。

使用/输出示例

$ xargs --no-run-if-empty --show-limits </dev/null
Your environment variables take up 3643 bytes
POSIX upper limit on argument length (this system): 2091461
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2087818
Size of command buffer we are actually using: 131072
Maximum parallelism (--max-procs must be no greater): 2147483647
Run Code Online (Sandbox Code Playgroud)