프로세스를 백그라운드로 보내고 터미널을 소유하지 않은 후 종료합니다(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결국 백그라운드 작업의 종료 상태로 종료되지만 해당 작업을 시작할 수 없거나 어떤 방법으로든 브라우저를 닫아 해당 작업이 종료될 때까지 종료되지 않습니다.

관련 정보