나는 보통 다음과 같은 여러 명령을 실행합니다.
sleep 2 && sleep 3
또는
sleep 2 ; sleep 3
그러나 하나의 명령 줄 명령으로 백그라운드에서 두 가지를 모두 실행하려면 어떻게해야합니까?
sleep 2 & && sleep 3 &
작동하지 않습니다. 그리고 어느 쪽도 대체하지 않습니다 &&
와 함께;
그것을 할 수있는 방법이 있습니까?
나는 보통 다음과 같은 여러 명령을 실행합니다.
sleep 2 && sleep 3
또는
sleep 2 ; sleep 3
그러나 하나의 명령 줄 명령으로 백그라운드에서 두 가지를 모두 실행하려면 어떻게해야합니까?
sleep 2 & && sleep 3 &
작동하지 않습니다. 그리고 어느 쪽도 대체하지 않습니다 &&
와 함께;
그것을 할 수있는 방법이 있습니까?
답변:
정확히 어떻게 달리기를 원하십니까? 백그라운드에서 시작하고 순차적으로 실행 하려면 다음과 같이하십시오.
(sleep 2; sleep 3) &
반면에 백그라운드 에서 병렬 로 실행 하려면 대신 다음을 수행하십시오.
sleep 2 & sleep 3 &
그리고 다음과 같은 두 가지 기술을 결합 할 수 있습니다.
(sleep 2; echo first finished) & (sleep 3; echo second finished) &
bash는 bash이기 때문에 때로는 동일한 작업을 수행하는 데는 여러 가지 다른 기술이 있지만 때로는 약간의 차이가 있습니다.
sleep 2 && sleep 3 &
? 나는 그것을 bash에서 시도했고 같은 방식으로 작동하는 것 같습니다 (에코로 시도).
sleep 2 && echo "foo" && sleep 3 & echo "bar""
? &&
오퍼레이터는 이전 명령을 실행하도록 지시 쉘, 단지 오류없이 그 명령을 실행하면 쉘은 후속 명령을 실행한다. 치명적 오류가 아닌 한 이전 명령의 종료 상태에 관계없이 후속 명령을 실행할 수 ;
있기 때문에 이는 본질적으로와 다릅니다 ;
. 이 &
명령은 쉘이 백그라운드에서 앞에있는 모든 "연결된"명령을 실행하도록 지시합니다. 여기서 "연결됨"은 명령이 파이프 ( |
) 또는 논리 연산자의 일부임을 의미합니다 .
Of these list operators, ‘&&’ and ‘||’ have equal precedence, followed by ‘;’ and ‘&’, which have equal precedence.
bash 매뉴얼에서.
마지막 버전에 일부 파렌을 추가해야합니다.
(sleep 2 &) && (sleep 3 &)
또는 이것도 작동합니다.
(sleep 2 &) ; (sleep 3 &)
&
종료 상태는 항상 0입니다. 따라서 위의 두 경우는 똑같은 일을 수행합니다 (쉘은 차례로 비동기 적으로 양쪽을 실행합니다 ).
위의 답변은 괄호를 사용합니다. Bash는 비슷한 목적으로 중괄호를 사용할 수도 있습니다.
{ sleep 2 && sleep 3; } &
중괄호는 구문에 대해 까다 롭습니다. 공백 뒤에 {
, 공백 앞에 }
및 마지막 세미콜론이 필요합니다. 경우에 따라 버팀대는 새 서브 쉘을 포크하지 않기 때문에보다 효율적입니다. 이 경우 차이가 있는지 모르겠습니다.
{ sleep 2; sleep 3; } &
?
다음 $(command)
과 같이 bash 명령 대체를 사용할 수 있습니다 .
$(command1 ; command2) &
stdin과 stdout은 여전히 상위 프로세스에 연결되어 있으며 최소한 stdout을 리디렉션하는 것은 까다로울 수 있습니다. 또는 명령을 한 줄로 연결 한 다음 문자열을 bash
명령에 전달 하여 실행을 처리 할 새 프로세스를 생성 할 수 있습니다.
bash -c "command1 ; command2" &
백그라운드에서 여러 명령을 실행해야 할 때 bash 스크립트에서 특히 유용합니다.
이 두 문장은 동일해야합니다. 배시 프로세스는 명령 (명령 쇄) 및 처리하는 경우에 모두 산란되는 &
끝이 실행을 분리한다.
추가 할 수있는이 시간 &>/dev/null
전과 &
표준 출력 적어도 리디렉션에 명령의 끝에와 부모 프로세스의 표준 출력에 출력을 피할 수 있습니다. 다음과 같은 것 :
bash -c "command1 ; command2" &>/dev/null &
여러 명령을 순차적으로 실행하려면 실제로 어디에서나 작동하는 간단한 방법이 있습니다. 파일 만들기! 이 방법의 장점은 깨끗하고 단순하다는 것입니다.
먼저 이름을 가진 파일을 만드십시오 (예 :) commands.sh
. 그런 다음 명령을 거기에 넣으십시오. 샘플은 다음과 같습니다.
commands.sh:
#!/system/bin/sh
sleep 3;
sleep 2;
이제 우리는 마지막 단계에 있습니다. 백그라운드에서 (순차적으로) 명령을 실행하려면 다음을 실행하십시오.
$ sh commands.sh &
()
명령을 둘러싸는 데 사용 합니다.