Bash 스크립트의 다양한 화면 세션에서 여러 작업을 시작하는 방법은 무엇입니까?

Bash 스크립트의 다양한 화면 세션에서 여러 작업을 시작하는 방법은 무엇입니까?

내가 사용하고 싶은 프로그램은 다음을 통해 시작할 수 있습니다.

./myprogram < input_part1.txt > output_part1.txt

각 작업이 별도의 세션에서 실행되는 myprogram하나의 스크립트에서 4개의 작업을 어떻게 시작할 수 있습니까 ? 스크립트를 시작할 때까지 세션이 존재하지 않습니다.BASHSCREEN

나는 시도했다:

#!/bin/bash
screen -mdS test1 ./myprogram < input_part1.txt > output_part1.txt
screen -mdS test2 ./myprogram < input_part2.txt > output_part2.txt
screen -mdS test3 ./myprogram < input_part3.txt > output_part3.txt
screen -mdS test4 ./myprogram < input_part4.txt > output_part4.txt

그러나 이것은 작동하지 않습니다. 왜 안 돼?

답변1

단일 세션의 경우 다음과 같은 것을 사용합니다.

cat > screenrc-test <<EOF
screen -t test1 sh -c "./myprogram < input_part1.txt > output_part1.txt"
screen -t test2 sh -c "./myprogram < input_part2.txt > output_part2.txt"
screen -t test3 sh -c "./myprogram < input_part3.txt > output_part3.txt"
screen -t test4 sh -c "./myprogram < input_part4.txt > output_part4.txt"
EOF

screen -S test-all -c screenrc-test

왜 여러 세션을 원하는지 모르겠지만 구문은 비슷합니다.

screen -mdS test1 sh -c "./myprogram < input_part1.txt > output_part1.txt"

세션당. 리디렉션에는 셸이 필요합니다. 그렇지 screen않으면 리디렉션이 myprogram.

한 가지 예:

#!/bin/sh
screen -mdS test1 zsh -c "repeat 4 { date; sleep 1; } > out1"
screen -mdS test2 zsh -c "repeat 4 { date; sleep 1; } > out2"
screen -mdS test3 zsh -c "repeat 4 { date; sleep 1; } > out3"

실행 후(4초 대기) 다음을 얻습니다.

==> out1 <==
Tue Sep  2 09:23:07 CEST 2014
Tue Sep  2 09:23:08 CEST 2014
Tue Sep  2 09:23:09 CEST 2014
Tue Sep  2 09:23:10 CEST 2014

==> out2 <==
Tue Sep  2 09:23:07 CEST 2014
Tue Sep  2 09:23:08 CEST 2014
Tue Sep  2 09:23:09 CEST 2014
Tue Sep  2 09:23:10 CEST 2014

==> out3 <==
Tue Sep  2 09:23:07 CEST 2014
Tue Sep  2 09:23:08 CEST 2014
Tue Sep  2 09:23:09 CEST 2014
Tue Sep  2 09:23:10 CEST 2014

표시 명령은 병렬로 실행됩니다.

관련 정보