하나의 명령으로 백그라운드에서 여러 프로그램을 어떻게 실행할 수 있습니까?


36

하나의 명령으로 백그라운드에서 여러 프로그램을 어떻게 실행할 수 있습니까?

아래 명령을 시도했지만 작동하지 않습니다.

nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'

nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'

하나의 "명령"은 무엇입니까? 배쉬 라인?
Oluf Lorenzen


명백한 것이 누락되었을 수 있지만 &&는 이전 명령의 종료 코드를 알고 있음을 나타냅니다. 당신이 그것을 배경으로하면 종료 코드를 알 수 없습니다. 거기에는 기능적인 필요가 무엇입니까?
Richlv 2012 년

답변:


32

쉘 구문 관점에서 / / ... &와 같은 명령을 분리합니다 (물론 다른 의미론으로). 그래서 그것은 단지 :;|&&

cmd1 & cmd2 & cmd3 &

1
이것은 / quite /가 아니며 ;, 첫 번째 명령이 종료되는 즉시 다음 명령을 시작합니다. &실제로 배경에 명령을 넣습니다. echo foo & echo bar & echo test &
Oluf Lorenzen

1
물론 @Finkregh. 아무도 의심하지 않습니다. 방금 명령 실행 방식에 영향을 미치지 않고 (구문 관점에서) 명령을 분리한다는 것을 의미했습니다.
Stéphane Chazelas

질문이 "단일 명령"을 실행하도록 지정되었으므로 요청 된 내용이 아닙니다. 일련의 명령이기 때문에 제 대답도 아닙니다. 그러나 출력이 연결되고 리디렉션 될 수있는 등 단일 명령의 의미가 하나 이상 있습니다.
Eli Heady

"단일 명령으로 여러 명령"은 옥시 모론 인 것 같습니다. 그 의미는 무엇입니까? 이 같은 뭔가를하는 경우 sudo당신이 한 번만 암호를 입력에서 다음 포장 할 수 있도록 bash -c또는 유사한.
Richlv

12

Compound Commands 라는 제목의 bash 맨 페이지 섹션 에는 list 및 group 명령의 두 가지 옵션이 있습니다.

그룹 명령은 중괄호로 묶인 일련의 명령 {}입니다. 목록은 괄호로 묶어 동일 ()합니다. 둘 다 내에서 여러 명령을 백그라운드 화하고 마지막으로 전체 컬렉션을 세트로 백그라운드 화하는 데 사용할 수 있습니다. 리스트 구성은 서브 쉘에서 명령을 실행하므로 변수 지정이 유지되지 않습니다.

명령 그룹을 실행하려면

{ command1 & command2 & } &

목록 (서브 쉘)에서 명령을 실행할 수도 있습니다.

( command1 & command2 ) &

1
천만에요. 매뉴얼에 링크를 추가했습니다. 리스트 ()구문은 서브 쉘에서 동봉 된 명령을 실행하므로 변수가 보존되지 않습니다.
Eli Heady

3

또 다른 방법:

$(command1 &) && command2 & 

아니요, 첫 번째 명령을 실행 한 다음 첫 번째 명령을 실행 한 다음 다른 명령을 실행합니다
Rahul Patil

당신 &&은 당신의 질문에 사용, 그것은 처음에 명령을 실행 한 다음 성공적으로 실행하면 다음 명령을 실행하는 것을 의미합니다. 당신이 그것을 고려하지 않으면 실행할 수 있습니다command1 & ; command2 & ;
PersianGulf

첫 번째 명령은 bg로 성공적으로 진행되거나 ;아무런 문제없이 실행됩니다
Rahul Patil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.