Ser*_*aev 1 linux bash environment-variables parameter-passing
假设我有一个程序需要大量命令行参数或非常大的单个命令行参数。假设我的应用程序想要接受单个命令行参数作为 65536 个符号 (64kB) 的字符串。众所周知,通过命令行和环境变量可以传递的字节数是有限制的。
这是一个小实验:
$ set > t
$ ls -lF | grep "\<t\>"
-rw-r--r-- 1 sergey sergey 118737 Oct 14 23:45 t
Run Code Online (Sandbox Code Playgroud)
而这118737字节大约是115kB。头文件/usr/include/linux/limits.h显示ARG_MAX为 131072,正好是 128kB。
有没有办法减少用户 bash 会话的环境变量大小?
set | wc -c(这是计算所有 shell 变量大小的一种更简单的方法)不相关,因为大多数变量不会导出,并且该限制仅适用于导出的变量和命令行参数。
尝试export | wc -c获得现实的观点。在一个 shell 会话中,我碰巧打开了:
$ set | wc -c
241235
$ export | wc -c
4652
Run Code Online (Sandbox Code Playgroud)
您还可以从以下位置获取各种有用的信息xargs:
$ xargs --show-limits </dev/null
Your environment variables take up 3730 bytes
POSIX upper limit on argument length (this system): 2091374
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2087644
Size of command buffer we are actually using: 131072
Run Code Online (Sandbox Code Playgroud)
或者来自以下的更简单的报告getconf:
$ getconf ARG_MAX
2097152
Run Code Online (Sandbox Code Playgroud)
您的特定系统很可能允许超过ARG_MAX字节数。
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |