나는 GNU "bash" 쉘을 실행하는 Linux 시스템의 일부 쉘 스크립트를 "상속"했습니다. 특별한 경우에는 머신이 GNU bash 버전 2.0.5b를 실행하고 있었습니다.
이 스크립트 중 하나에는 wait &
"for line" 루프의 일부로 ("wait &sand") 지시문이 있습니다 for
. 언뜻 보기에 이것은 호기심이 많고 흥미로운 관용구처럼 보이지만 웹에서 검색해 본 결과 관련된 어떤 것도 반환되지 않았습니다. man wait
다음 설명과 함께 "BASH_BUILTINS"("BASH BUILTINS COMMAND") 맨페이지를 표시합니다.
wait [n]
Wait for the specified process and return its termination status.
n may be a process ID or a job specification; if a job spec is given,
all processes in that job's pipeline are waited for. If n is not
given, all currently active child processes are waited for, and the
return status is zero. If n specifies a non-existent process or job,
the return status is 127. Otherwise, the return status is the exit
status of the last process or job waited for.
매뉴얼 페이지의 이 부분을 읽어보면 wait &
"백그라운드에서 자동으로"현재 활성화된 모든 하위 프로세스를 기다리고 상태 0을 반환합니다.”. 내 해석이 정확합니까? 이것은 일반적이고 유용한 관용구입니까?
컨텍스트를 추가하기 위해 스크립트에서 다음 사용법을 논의합니다.
for file in `ls *.txt ; wait &`
do
...
[cp instructions]
...
[mv instructions]
...
[mailx instruction]
done
답변1
나는 이 코드를 작성하는 이유를 상상할 수 없으며, 이 코드를 작성한 사람이 무엇을 달성하려고 했는지도 잘 모르겠습니다. wait
여기서는 아무것도 수행되지 않습니다. 관점에서 볼 때예하위 프로세스가 없으므로 즉시 종료되고 기본적으로 noop 역할을 합니다( wait
명령 대체로 인해 자체적으로 하위 프로세스에서 실행되지만 관련이 없습니다).
서술자로서,ls의 출력을 구문 분석하는 것은 매우 취약합니다.. 대신 다음을 수행해 보세요.
for file in *.txt; do
...
done