여러 Bash 스크립트를 동시에 실행해야 합니다(정확하게 말하면 변수가 다른 동일한 스크립트). 탭 수를 제어하기 위해 터미널 탭에 그룹화하고 싶습니다.
스크립트는 정기적으로 출력되며 문제가 있는지 확인합니다.
백그라운드로 보내면
./script.sh 1 &
./script.sh 2 &
./script.sh 3 &
./script.sh 4
Ctrl나는 그들을 통제할 수 없게 될 것입니다. 예를 들어 + 를 통해 스크립트를 종료합니다 C. 위의 코드를 사용하여 pid
각 프로세스를 종료 해야 합니다 .
./all_scripts.sh
위의 코드는 터미널에 입력한 명령이 아니라 내 기본 스크립트(예:)의 내용입니다 .
단일 출력 스크립트로 처리하면서 동일한 터미널에서 스크립트를 실행하는 방법이 있습니까?
답변1
당신은 그들에 대한 통제력을 잃지 않을 것입니다. (마지막 항목 제외)을 배경으로 보냅니다.
지정된 명령 체인을 실행하면 호출이 ./script.sh 4
포그라운드에서 실행되고 다른 스크립트는 백그라운드에서 실행됩니다. 입력이 프런트엔드 스크립트로 전송됩니다. 전경 스크립트를 일시 중지하려면 을 누릅니다 CtrlZ. 계속 실행하기 위해 보류 중인 스크립트를 백그라운드로 보내려면 이 bg
명령을 사용하십시오.
현재 가지고 있는 스크립트(또는 더 정확하게는 작업)와 그 상태를 확인하려면 를 사용하세요 jobs
.
특정 채용정보를 눈에 띄게 만들려면 fg
해당 번호(위에 보고된 대로 )를 접두사 와 jobs
함께 사용하세요. 특정 작업을 종료하려면 해당 작업을 전면으로 가져와 현명 하게 종료 할 수 있습니다 .%
fg %2
fg
kill
kill -TERM %2
답변2
다양한 방법과 절차를 테스트한 후 실용적인 해결책은 다음과 같습니다.GNU 병렬. 이 답변은 다른 사람들에게 도움이 될 수 있기 때문에 게시합니다.
GNU Parallel
이 작업을 위해 제작되지는 않았지만 그 목적을 완벽하게 수행합니다.
다음과 같이 스크립트를 실행하면
parallel -u ::: './script.sh 1' './script.sh 2' #(and so forth)
모든 스크립트는 병렬로 실행됩니다.
-u
( ) 플래그는 스크립트를 실행할 때 --ungroup
스크립트 출력을 보냅니다 .stdout
Ctrl+ 작업과 이후에 실행 중인 모든 스크립트를 C종료합니다 .parallel
답변3
tmux
이런 목적 으로 사용할 수 있습니다 .
이는 하나의 탭을 여러 창으로 분할하는 것을 의미하는 터미널 멀티플렉서입니다.
- 명령을 사용하여 시작하십시오
tmux
. - 하나의 창을 두 개의 창으로 분할하려면
Contr
+B 다음에"
또는 를 사용하세요 .%
- 포그라운드에서 프로세스를 시작합니다.
Contr
프로세스 간을 전환하려면 uding +B
및 화살표 키를 사용하세요.
이제 터미널의 단일 탭에서 일반적으로 여러 프로세스를 제어할 수 있습니다.
특정 창에 초점을 맞추거나 초점을 맞추지 않으려면 Contr
+ B
뒤에 를 사용하세요 Z
.
스크롤이 필요한 경우 Contr
+를 B
누른 다음 Q
화살표 키를 사용하여 스크롤합니다(또는 마우스 모드 활성화).
치트 시트를 찾을 수 있습니다여기.
프로세스를 자동화할 수도 있습니다.
답변4
작업 백그라운드 처리기가 이러한 요구를 충족할 수 있습니다. https://vicerveza.homeunix.net/~viric/soft/ts/article_linux_com.html
데비안과 우분투에서는 별칭 "tsp"를 사용하여 도구를 찾을 수 있습니다.