"wait &"( "wait ampersand")가 유용한 (bash) 쉘 / 쉘 스크립트 관용구입니까?


12

GNU "bash"셸을 실행하는 Linux 컴퓨터 용 셸 스크립트를 "상속"했습니다. 특정한 경우, 머신은 GNU bash 버전 2.0.5b를 실행합니다.

이러한 스크립트 중 하나 wait &에는 for루프 의 "for line"의 일부로 ( "wait ampersand") 명령이 있습니다. 언뜻보기에는 호기심이 많고 흥미로운 관용구 인 것처럼 보이지만 내 웹 검색은 관련성이 없습니다. 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 spec­ification;  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 speci­fies 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

답변:


14

이 코드를 작성해야 할 이유를 상상할 수 없으며이 코드를 작성한 사람이 무엇을 달성하려고했는지 잘 모르겠습니다. wait여기서는 아무것도하지 않습니다-관점에서, 자식 프로세스 없으므로 즉시 종료하고 기본적으로 noop으로 작동합니다 ( wait명령 대체로 인해 자식 프로세스에서 자체 실행되지만 관련이 없습니다).

따로, ls의 출력을 파싱하는 것은 매우 취약 합니다. 대신이 작업을 수행하십시오.

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