연속 명령

연속 명령

;한 줄에 두 명령을 연결할 때 Bash는 두 번째 명령을 실행하기 전에 첫 번째 명령이 종료될 때까지 항상 기다린다고 가정하는 것이 맞습니까 ? 마찬가지로, 서로 다른 줄에 두 개의 서로 다른 명령이 포함된 쉘 스크립트에서 Bash는 두 번째 줄의 명령을 실행하기 전에 항상 첫 번째 줄의 명령이 종료될 때까지 기다립니다.

이 경우 첫 번째 명령이 완료될 때까지 두 번째 명령이 기다리지 않도록 한 줄이나 스크립트에서 두 명령을 모두 실행하는 방법이 있습니까?

또한 쉘 스크립트의 다른 줄은 ;또는로 연결된 별도의 줄 과 동일합니까 &&?

답변1

맞습니다. 스크립트의 명령은 기본적으로 순차적으로 실행됩니다.

&명령에 접미사 (단일 앰퍼샌드) 를 추가하여 백그라운드에서 명령을 실행할 수 있습니다 .

별도의 줄에 있는 명령은 ;기본적으로 사용되는 조합 명령과 동일합니다. 0이 아닌 종료 코드( set -e)에서 쉘을 중단하도록 지시하면 스크립트는 마치 모든 명령이 함께 실행된 것처럼 실행됩니다 &&.

답변2

두 번째 질문에 대답하려면 &백그라운드에서 명령을 시작하고 완료될 때까지 기다리지 않고 스크립트를 계속 실행할 수 있습니다.

commandA & commandB

스크립트가 아닌 대화형 터미널에서 이 명령을 실행하면 fg이를 사용하여 백그라운드 명령에 다시 초점을 맞추거나 jobs백그라운드 작업 목록을 볼 수 있습니다.

답변3

가장 간단한 경우, 이전 프로세스를 완전히 제어할 수 있는 경우 firstCommand && secondCommand다른 답변에서 이미 언급한 명령에 다음 명령을 연결할 수 있습니다. 이 구문은 성공 시 올바른 종료 코드를 반환하고 실패 시 0이 아닌 값을 firstCommand반환하는 책임을 지며 , 성공적으로 종료된 경우 에만 실행된다는 의미입니다.0secondCommandfirstCommand

당신이 할 때아니요firstCommand이미 실행 중이거나 firstCommand성공/실패 시 일반 종료 코드를 반환하지 않도록 제어 하려면 N초마다 실행 중인 프로세스를 폴링하고 secondCommand첫 번째 프로세스가 종료된 후에 시작할 수 있습니다.

while true ; do pgrep firstCommand && echo 'Still running...' || secondCommand ; sleep 1 ; done

❗️경고: 0이 아닌 종료 상태로 완료 secondCommand되어도 실행됩니다.firstCommand

또한보십시오:

답변4

다른 사람들이 말했듯이 백그라운드에서 실행되어야 하는 명령 끝에 & 기호를 추가해야 합니다.

스크립트가 모든 작업을 동시에 완료하고 종료하도록 하려면 스크립트 끝에 "wait" 명령을 추가하면 됩니다. 이 경우 bash는 실행을 계속하기 전에 모든 명령이 완료될 때까지 기다립니다.

관련 정보