커맨드 체인을 백그라운드로 만드는 방법?


15

와 같은 명령 체인을 배경으로하고 싶습니다 cp a b && mv b c && rm a.

나는 노력 cp a b && mv b c && rm a &했지만 이것이 마지막 과정을 배경으로합니다.

커맨드 체인을 어떻게 배경으로합니까?

답변:


22

cp a b && mv b c && rm a &맞다. &보다 우선 순위가 낮습니다 &&. 실제로 &;개행 문자 이외의 것보다 우선 순위가 낮습니다. 와 &동일한 구문 범주 ;에 있습니다. 차이점 ;은 명령 목록을 포 그라운드에서 &실행 하고 백그라운드에서 실행합니다. 이것을 직접 테스트 할 수 있습니다.

$ 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; } &

8
아래의 bash는 , { ... ; } &동안, 현재 프로세스 수준에서 포크을 ( ... ) &서브 쉘에서 포크를 할 ... 결과는 동일하지만 미묘한 차이가 어쨌든있다.
F. Hauri

14

(cp a b && mv b c && rm a )&체인 전체를 포함하는 것처럼 패러 틴에 넣을 수 있습니다 .


2
그리고 중요한 점은 전체 체인이 배경이되어 있음을 명백히 보여줍니다. 심지어 운영자가 어떻게 묶여 있는지에 대한 규칙을 모르는 사람도 있습니다.
jackweirdy

2
@Gilles의 답변에 대한 내 의견을 { ... ; }보면 선호하는 형식 이라고 생각 합니다.
F. Hauri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.