[server] Linux 명령 행 문자 제한

명령 줄에서 스크립트에 변수를 전달하고 있습니다. 명령의 문자 제한은 무엇입니까? 예 :

$ MyScript reallyreallyreally...reallyreallyreallylongoption

감사.



답변

쉘 / OS 부과 제한은 일반적으로 매우 길며 일반적으로 1 ~ 2 십만 자입니다.

getconf ARG_MAX명령에 대한 최대 입력 제한을 제공합니다. 데비안 시스템에서 현재 터미널을 열면 128107은 131072를 반환합니다. 내 메모리가 올바르게 제공되는 것처럼 환경 변수에 의해 제한이 줄어 듭니다. 이는 쉘에 의해 동일한 구조로 전달되지만 대부분의 경우 수백 자만 제거합니다. 이 값의 근사값을 찾으려면 env | wc -c이 기계에서 현재 로그인시 325자를 제안합니다.

스크립트가이 전체 길이를 허용 할 가능성이 있지만 다른 유틸리티가 의도적으로 또는 디자인 문제를 통해 자체 제한을 적용 할 가능성은 없습니다. 긴 명령 행에서 개별 인수의 길이 및 / 또는 파일 경로의 길이에 대한 인위적인 제한이있을 수도 있습니다.


답변

ARG_MAX는 실제로 명령 행과 환경의 총 크기를 제한하지만 추가 제한이 있습니다. 한 인수는 MAX_ARG_STRLEN보다 길어서는 안됩니다 (불행히도 131072로 하드 코딩되었습니다).

https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument를 참조 하십시오.


답변

가장 긴 가변 길이가 무엇입니까? perl의 “x”를 사용하여 매우 긴 변수 이름을 만들 수 있습니다.

 VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR

내 시스템에서 131071이 작동합니다.

변수가 131072에 인쇄되어 너무 큽니다.

VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long


답변