매우 큰 매개변수(크기 1MB)가 포함된 명령을 입력하려고 하는데 "매개변수 목록이 너무 깁니다."라는 메시지가 표시됩니다. 이 논쟁에 어떻게 참여할 수 있습니까?
운영 체제: 리눅스 우분투
답변1
ARG_MAX
인수가 커널 제한보다 큰 경우 실행 파일 간에 인수를 전달할 수 없습니다.
당신이 가지고 있다면목록인수가 너무 길어서 더 작은 부분으로 나눌 수 있습니다(예: 를 사용) xargs
. 이렇게 하면 가능한 많은 인수를 제공하여 필요한 만큼 명령이 실행됩니다.
구문은 입니다 xargs command <file
. 생략하면 command
해당 인수가 표시됩니다(예: ) echo
.
시범적으로,
xargs -n 4 </etc/motd
처음 4개의 토큰은 한 줄(첫 번째 호출)에 인쇄되고 다음 4개의 토큰은 다른 줄에 인쇄됩니다. (Parameters는 -n
최대 인수 개수를 설정하므로 제한은 전혀 사용되지 않습니다 ARG_MAX
.)
실행하려는 명령에 원하지 않는 부작용이 있는 경우에는 작동하지 않을 수 있습니다. 예를 들어, command
기존 ./a.out
파일을 덮어쓰는 경우 작업이 완료되면 마지막 실행 결과가 남게 됩니다.
command
명령줄 인수 대신 파일이나 표준 입력을 읽도록 구성하거나 수정할 수 있는 경우 이 제한 사항을 해결할 수 있습니다. 파일이나 스트림은 보다 클 수 있으며 ARG_MAX
일반적으로 그렇습니다.