Bash

如何在 Bash 腳本的不同螢幕會話中啟動多個作業?

  • November 3, 2017

我想使用的程序可以通過

./myprogram < input_part1.txt > output_part1.txt

如何在每個作業在單獨的會話中執行myprogram的腳本中啟動四個作業?在我啟動腳本之前會話不存在。BASH``SCREEN

我試過:

#!/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

但這不起作用。為什麼不?

對於單個會話,我使用類似的東西:

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"

對於每個會話。重定向需要使用 shell,否則重定向將應用於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

顯示命令是並行執行的。

引用自:https://unix.stackexchange.com/questions/153140