
다음과 같이 서브셸에서 일련의 명령을 실행합니다.
(git pull;git rebase develop)&>/dev/null
나는 이것이 생성된 하위 쉘과 하위 프로세스를 백그라운드에 두고 사용자에게 제어권을 반환한다고 생각합니다.
그러나 실제로는 터미널이 잠시 정지되어 서브셸의 명령이 완료되기를 기다리는 것처럼 보입니다.
그렇다면 왜 이런 일이 일어나고 그러한 일을 수행하는 올바른 방법이 무엇인지 설명할 수 있는 사람이 있습니까?
답변1
bash
셸을 실행하는 경우 표준 출력 및 오류 스트림을 (와 동일 ) &>/dev/null
로 리디렉션 하지만 하위 셸을 비동기 프로세스로 실행 하지는 않습니다 . 이렇게 하려면 마지막에 추가 콘텐츠를 추가해야 합니다./dev/null
>/dev/null 2>&1
( ... )
&
(git pull; git rebase develop) &>/dev/null &
ksh93
그러한 기능은 없으며 POSIX에서는 사용할 수 없습니다.
답변2
sleep
케이스에 추가하고 &
명령 끝에 추가하여 백그라운드에 놓을 수 있습니다.
(git pull; sleep 3; git rebase develop) &>/dev/null &
아니면 다음을 사용할 수 있습니다.
for cmd in $commands
do
"$cmd" &
done
wait
&
명령 끝에 있는 명령은 명령을 백그라운드에서 실행하고 백그라운드 wait
작업이 완료될 때까지 기다립니다.