source

bash에서 여러 백그라운드 명령을 한 줄로 실행하려면 어떻게 해야 합니까?

manysource 2023. 6. 4. 10:38

bash에서 여러 백그라운드 명령을 한 줄로 실행하려면 어떻게 해야 합니까?

일반적으로 다음과 같은 명령을 여러 번 실행합니다.

sleep 2 && sleep 3

또는

sleep 2 ; sleep 3

하나의 명령줄 명령에서 백그라운드로 둘 다 실행하려면 어떻게 해야 합니까?

sleep 2 & && sleep 3 &

작동하지 않습니다.그리고 또한 교체하지 않습니다.&&와 함께;

할 수 있는 방법이 있습니까?

정확히 어떻게 운영했으면 좋겠습니까?백그라운드에서 시작하여 순차적으로 실행되도록 하려면 다음과 같은 작업을 수행합니다.

{ sleep 2; sleep 3; } &

네가 원한다면sleep 3다음과 같은 경우에만 실행됩니다.sleep 2성공한 경우:

sleep 2 && sleep 3 &

반대로 백그라운드에서 병렬로 실행하려면 대신 다음 작업을 수행할 수 있습니다.

sleep 2 & sleep 3 &

그리고 다음과 같은 두 가지 기술을 결합할 수 있습니다.

{ sleep 2; echo first finished; } & { sleep 3; echo second finished; } &

수줍음을 타는 것을 부끄러워하며, 때로는 서로 미묘한 차이가 있기도 하지만, 동일한 작업을 수행하기 위한 다양한 기술이 있습니다.

마지막 버전에 일부 부모님을 추가해야 합니다.

(sleep 2 &) && (sleep 3 &)

아니면 이것도 효과가 있습니다.

(sleep 2 &) ; (sleep 3 &)

추가해야 하는 여러 백그라운드 명령 실행&각 명령의 끝입니다.ex:(command1 &) && (command2 &) && (command3 &)

위의 답변은 괄호를 사용합니다.Bash도 비슷한 목적으로 중괄호를 사용할 수 있습니다.

{ sleep 2 && sleep 3; } &

대괄호는 구문에 대해 더 까다롭다는 점에 유의하십시오. 뒤에 공백이 있습니다.{앞자리}최종 세미콜론이 필요합니다.경우에 따라 새 하위 셸을 포크하지 않기 때문에 브레이스가 더 효율적입니다.이 경우에 저는 그것이 차이를 만들 수 있는지 모르겠습니다.

bash 명령 대체를 사용할 수 있습니다.$(command)다음과 같이:

$(command1 ; command2) &

stdin 및 stdout은 여전히 상위 프로세스에 연결되어 있으며 적어도 stdout을 리디렉션하는 것은 까다로울 수 있습니다.또는 명령을 한 줄로 묶은 다음 문자열을 다음으로 전달할 수 있습니다.bash실행을 처리할 새 프로세스를 생성하는 명령입니다.

bash -c "command1 ; command2" & 

이 기능은 백그라운드에서 여러 명령을 실행해야 하는 경우 bash 스크립트에서 특히 유용합니다.

이 두 문장은 동등해야 합니다.bash 프로세스는 두 경우 모두 명령(명령 체인) 및&마지막에 실행을 분리합니다.

이번에는 추가할 수 있습니다.&>/dev/null이전에&명령 끝에 적어도 stdout을 리디렉션하고 상위 프로세스의 stdout에 대한 출력을 방지합니다.다음과 같은 것:

bash -c "command1 ; command2" &>/dev/null &

효과:

$(sleep 2 &) && sleep 3 &

또한 다음을 수행할 수 있습니다.

$(sleep 2 && sleep 3) &

저도 같은 임무를 수행하고 있습니다.요 ㅠㅠㅠㅠ(sleep2 ; fg )& sleep3 ; fg,그건 효과가 있다.그리고 ctrl+c를 두 배로 프리패스하면 두 프로세스가 중지될 수 있습니다.

언급URL : https://stackoverflow.com/questions/14612371/how-do-i-run-multiple-background-commands-in-bash-in-a-single-line