2개 달리고 있어요mysql
spbash 스크립트에서. 동시에 시작하고(원격 서버에서 실행 중임) 백그라운드에 두고 완료되면 다음 단계로 이동하고 싶습니다. exit status
오류가 발생할 경우를 대비해 둘 다 가져오고 싶습니다 . 이를 염두에 두고 아래 명령을 사용해 보았지만 sleep
작동하지 않았습니다.
편집하다제프 샬러에 따르면답변: 제가 시도한 것은 다음과 같습니다.
givinv@87-109:~$ sleep5 & PID5=$!; exit5=$?; sleep 4 & PID4=$!; exit4=$?; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29530
[2] 29531
No command 'sleep5' found, did you mean:
Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]- Exit 127 sleep5
[2]+ Done sleep 4
0 0
givinv@87-109:~$ unset exit5 exit4
givinv@87-109:~$ sleep5 & exit5=$?;PID5=$!; sleep 4 & exit4=$?;PID4=$!; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29535
[2] 29536
No command 'sleep5' found, did you mean:
Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]- Exit 127 sleep5
[2]+ Done sleep 4
0 0
givinv@87-109:~$
나sleep5가 의도적으로 배치되었습니다(잘못된 명령).0
하지만 여전히 exit status
. 위 명령을 실행하면 다음과 같은 줄이 표시됩니다 [1]- Exit 127 sleep5
. 스크립트에서 실행할 때 이를 캡처할 수 있습니까?
exit status
두 개의 명령을 실행하는 방법동시에?
답변1
~에서배쉬 매뉴얼 페이지, 강조를 위해 이탤릭체:
기다리다
wait[-n] [작업 사양 또는 pid...]
프로세스 ID pid 또는 jobspec jobspec으로 지정된 각 하위 프로세스가 종료될 때까지 기다립니다.그리고 기다린 마지막 명령의 종료 상태를 반환합니다.
배경 기호를 잘못 배치한 것 같습니다 &
.
sleep5;exit5=$? & PID5=$!;$PID5를 기다립니다;echo $?;echo $exit5
5초 동안 대기 상태로 설정하고 exit5
작업에 대한 작업 ID를 설정한 PID5
다음 작업이 성공적으로 완료될 때까지 기다립니다 echo
. 마지막 항목에는 echo
빈 줄이 표시됩니다. 백그라운드 프로세스(서브셸)가 종료되어 exit5
변수가 할당되지 않은(비어 있음) 상태이기 때문입니다.
아마도 이것이 당신이 원하는 것일까요?
sleep5&PID5=$!;$PID5를 기다립니다;exit5=$?;echo $exit5
백그라운드 로 전환하고 sleep 5
해당 PID를 에 저장합니다 PID5
. 프로세스가 종료될 때까지 기다린 다음 반환 코드를 에 캡처한 exit5
다음 저장된 반환 코드를 에코합니다.