일련의 명령을 서로 독립적으로 실행

일련의 명령을 서로 독립적으로 실행

다음과 같은 파일이 있는 경우

cmd1

cmd2

cmd3

그리고 나는 그것들을 서로 독립적으로 실행하고 종료 상태를 출력하는지 여부에 관계없이 독립적으로 실행하고 싶습니다. 즉, 종료될 것으로 예상하지 않고 프로세스를 계속 시작하며 실패할 수도 있고 실패할 수도 있습니다. ;다음 명령이 실행된다는 것을 알고 있습니다. 하지만 그렇지 않습니다. 이전 명령이 실패하거나 성공할 때까지 기다리기 때문입니다. 모든 명령을 한 번에 시작하고 싶습니다.

그것은 다음과 같습니다 sleep 60m. 그런 다음 음악을 재생하고 벨을 울리고 브라우저를 실행하지만 분명히 음악이 재생되어 벨이 울릴 때까지 기다린 다음 브라우저를 실행할 방법이 없습니다. 그것은 즉시 일어나야 합니다.

추가됨: 예를 들어 다음과 같은 방법을 사용합니다.

파일에서 줄을 읽고, 각 줄에 대해 터미널을 열고 실행하시겠습니까?

답변1

각 줄 끝에 앰퍼샌드를 추가하기만 하면 모든 명령이 백그라운드로 분기됩니다.

cmd1 &
cmd2 &
cmd3 &

$ more at_once.bash 
#!/bin/bash

echo "1" && sleep 10 &
echo "2" && sleep 10 &
echo "3" && sleep 10 &
pgrep -a sleep

이제 이 스크립트를 실행하면 다음과 같습니다.

$ ./at_once.bash 
1
3
2
7533 sleep 10
7535 sleep 10
7536 sleep 10

세 번째 명령이 두 번째 명령보다 먼저 에코되는 배경 특성으로 인해 작업이 순서대로 실행되지 않은 것을 볼 수도 있습니다. pgrep sleep3개의 백그라운드 명령이 모두 동시에 실행되고 있음을 보여줍니다 .

메모:echo "X" && sleep 10나는 단순히 명령이 백그라운드에서 실행되고 있음을 보여주기 위해 표기법을 사용했습니다 . 이 표기법은 배경 자체와는 아무런 관련이 없으며 후행은 명령을 배경에 &"넣는" 것입니다 .sleep 10

&단일 명령줄에서 이 작업을 수행하려는 경우 구분 기호로 사용할 수도 있습니다 .

$ sleep 10 & sleep 10 & sleep 10 &
[1] 7731
[2] 7732
[3] 7733

이 하나의 라이너를 확인하는 중:

$ pgrep -a sleep
7731 sleep 10
7732 sleep 10
7733 sleep 10

다시 한번 우리는 그것들이 모두 동시에 실행되는 것을 봅니다. 세미콜론을 사용하려는 경우:

$ sleep 10 ; sleep 10 ; sleep 10

명령 sleep 10은 직렬로 실행되는 데 30초가 걸리고 병렬로 실행되는 데는 10초밖에 걸리지 않습니다.

관련 정보