gnome-terminal에서 명령 행 인수의 최대 길이는 얼마입니까?


답변:


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 'SO- 악마 중지

1
특히 "실제로 사용할 수 있습니다"출력 때문에이 답변이 마음에 듭니다. 나는 이것을 약간 꼬아 서 "실제로"값을 분리하기 위해이 명령 변형을 생각해 냈습니다 ... 그러나 그것은 작동하고 스크립트에 적합합니다.xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O

이상하게도 xargs는 POSIX 한계 (POSIX 한계 = ARG_MAX-2048 (헤드 룸)-envvars)에서 환경 한계를 두 배로 계산하는 것 같습니다.
Tobu

18

대답은 sysconf 값 에서 나옵니다 ARG_MAX. 시스템에서이를 검사하려면 다음을 수행하십시오.

getconf ARG_MAX

나를 위해, 이것은보고합니다 2097152. 자세한 내용은 맨 페이지를 확인하십시오.

man sysconf

예를 들어 프로그램 내에서 이것을 얻으려면 :

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

1
감사합니다 KC .. +1; 깔끔한 방법은 절대 MAX를 얻을 수 있습니다,하지만 난 런타임 값 뒤에 실제로이었다로 나는 ... 때문에 "실제로 가능"요소의 xargs를에게 방법을 선호했다 (하지만 나는 그것을 :( 언급하지 않았다
피터 .O

0

나는 실제로 그놈 터미널에 대해 알지 못하지만 쉘에는 '고정 된'한계가 아니라 스택의 한계가 있습니다.

그러나 인수 당 128KB의 하드 코드 제한이 있습니다. '매우 매우 긴 인수 ...'를 사용하지 않으면 문제가되지 않습니다.

이에 대한 자세한 내용은 여기를 참조하십시오.

http://www.mail-archive.com/bug-make@gnu.org/msg05522.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.