Bashスクリプトのさまざまな画面セッションで複数のタスクを開始するには?

Bashスクリプトのさまざまな画面セッションで複数のタスクを開始するには?

私が使用したいプログラムは、以下から始めることができます。

./myprogram < input_part1.txt > output_part1.txt

各ジョブが別々のセッションで実行されるmyprogram1つのスクリプトで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

表示コマンドは並列に実行されます。

おすすめ記事