명령을 동시에 실행하려면 &
명령 구분 기호를 사용할 수 있습니다 .
~$ command1 & command2 & command3
이 시작 command1
되고 백그라운드에서 실행됩니다. 와 동일합니다 command2
. 그런 다음 command3
정상적으로 시작 됩니다.
모든 명령의 출력이 함께 왜곡되지만 문제가되지 않으면 해결 방법이됩니다.
나중에 출력을 개별적으로 살펴 보려면 각 명령의 출력을로 파이프하여 출력 tee
을 미러링 할 파일을 지정할 수 있습니다.
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
출력이 매우 지저분 할 수 있습니다. 이를 방지하기 위해 모든 명령의 출력에 접두사를 제공 할 수 sed
있습니다.
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
그래서 우리가 그 모든 것을 합치면 우리는 다음을 얻습니다.
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
이것은 아마도 당신이 볼 것의 가장 이상적인 버전입니다. 그러나 지금 내가 생각할 수있는 최선의 방법.
한 번에 모두 중지하려면 빌드를 사용할 수 있습니다 trap
.
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
이 실행됩니다 command1
및 command2
배경과 command3
당신이 그것을 죽일 수 전경에 Ctrl+ C.
Ctrl+로 마지막 프로세스를 종료 C하면 kill %1; kill %2
명령이 실행됩니다. 우리는 실행을 INTerupt SIGnal의 수신과 연결했기 때문에 Ctrl+ 를 누릅니다 C.
그들은 각각 첫 번째와 두 번째 백그라운드 프로세스를 종료합니다 (your command1
및 command2
). 를 사용하여 명령을 완료 한 후에 트랩을 제거하는 것을 잊지 마십시오 trap - SIGINT
.
명령의 완전한 괴물 :
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
물론 screen을 볼 수 있습니다 . 콘솔을 원하는만큼 별도의 콘솔로 분할 할 수 있습니다. 따라서 모든 명령을 개별적으로 동시에 모니터링 할 수 있습니다.