명령 체계를 백그라운드에 넣는 방법은 무엇입니까?

명령 체계를 백그라운드에 넣는 방법은 무엇입니까?

명령 체인을 배경으로 설정하고 싶습니다(예: cp a b && mv b c && rm a.

이렇게 해봤 cp a b && mv b c && rm a &지만 최종 과정을 위한 배경일 뿐입니다.

명령 체인의 배경을 설정하는 방법은 무엇입니까?

답변1

cp a b && mv b c && rm a &맞다. 실제로는 newline 이외의 다른 것보다 &우선순위가 낮습니다 . newline과 동일한 구문 범주에 있지만, 백그라운드에서 명령 목록을 실행하는 동안 포그라운드에서 실행한다는 점만 다릅니다. 이것을 직접 테스트할 수 있습니다:&&&;&;;&

$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited

pdksh, ksh93, bash, csh, tcsh와 동일합니다.

예외는 이상하게 호환되지 않는 zsh입니다. 이것은매뉴얼에 기록된:

&하위 목록이 &|또는 로 끝나는 경우 &!쉘은 백그라운드에서 마지막 파이프를 실행하고 완료될 때까지 기다리지 않습니다(백그라운드에서 전체 하위 목록을 실행하는 다른 쉘과의 차이점에 유의하십시오).

불행하게도 zsh는 sh 또는 ksh 호환 모드에서도 이런 방식으로 동작합니다. 전체 명령이 백그라운드에서 실행되도록 하려면 명령을 중괄호나 괄호로 묶습니다. 괄호는 서브쉘을 생성하고 중괄호는 그렇지 않습니다. 그러나 백그라운드 명령이 서브쉘에 있기 때문에 이것은 중요하지 않습니다(일부 쉘의 미세 최적화 제외).

{ cp a b && mv b c && rm a; } &

답변2

(cp a b && mv b c && rm a )&예를 들어 전체 체인을 포함하려면 괄호 안에 넣을 수 있습니다 .

관련 정보