프로세스를 백그라운드로 보내고 터미널을 거부하고 종료합니다(zsh에서 & 및 && 연산자 충돌)

프로세스를 백그라운드로 보내고 터미널을 거부하고 종료합니다(zsh에서 & 및 && 연산자 충돌)

백그라운드에서 프로세스를 실행한 다음 현재 터미널을 종료해야 합니다.

다음 명령을 실행하면 오류가 발생합니다.

> google-chrome-stable &! && exit
zsh: parse error near '&&'

나는 단순히 "google-chrome-stable &!"을 호출하고 if 문을 통해 오류 코드를 확인하는 것을 고려했지만 이를 수행하는 더 쉬운 방법을 찾고 싶습니다.

답변1

&!두 개의 개별 명령이 있으므로 &&두 명령을 결합할 수 없습니다.

google-chrome-stable &! exit

어쩌면 그게 당신이 쫓고 있는 것일 수도 있습니다.

백그라운드 명령이 종료될 때까지 종료 코드를 얻을 수 없습니다...

답변2

백그라운드 작업 시작에서 다시 호출 셸로의 종료 상태는 다음과 같습니다.언제나영:

% bogus &
[1] 66712
% zsh: command not found: bogus

[1]  + exit 127   bogus
% echo $?
0

... &!둘 다 명령 종료자입니다 &&. 이는 귀하의 명령이 다음과 같이 작성되어야 함을 의미합니다.

google-chrome-stable &! exit

또는 동등한

google-chrome-stable &!
exit

wait작업의 작업 ID(거부한 이후에는 가지고 있지 않음) 또는 프로세스 ID(그러나 프로세스를 거부했기 때문에 가져올 수 없음)를 사용하여 백그라운드 작업의 실제 종료 상태만 얻을 수 있습니다. 백그라운드 작업의 실제 종료 상태를 가져옵니다. 쉘은 더 이상 자식 프로세스의 프로세스로 간주되지 않으므로 쉘의 현재 작업 목록에서 제거되었습니다.

만약 당신이 그 일을 포기하지 않았다면 아마도

google-chrome-stable & chrome_pid=$!

그런 다음 명령은 wait $chrome_pid결국 백그라운드 작업의 종료 상태로 종료되지만 해당 작업이 종료될 때까지는 종료되지 않습니다(어떤 방식으로든 브라우저를 시작하거나 닫는 데 실패했기 때문에).

관련 정보