Como iniciar vários trabalhos em diferentes sessões de tela em um script Bash?

2

O programa que eu quero usar pode ser iniciado via

./myprogram < input_part1.txt > output_part1.txt

Como posso iniciar quatro tarefas de myprogram em um BASH -script em que cada trabalho é executado em uma SCREEN -session separada? As sessões não existem antes de iniciar o script.

Eu tentei:

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

mas isso não funciona. Porque não?

    
por Chrispie 01.09.2014 / 13:37

1 resposta

3

Para uma única sessão, eu uso algo assim:

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

Eu não sei porque você quer várias sessões, mas a sintaxe é, de forma semelhante:

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

para cada sessão. O uso de um shell é necessário para os redirecionamentos, caso contrário, os redirecionamentos seriam aplicados ao comando screen em vez de myprogram .

Um exemplo:

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

Depois de executá-lo (e esperar por 4 segundos), recebo:

==> 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

mostrando que os comandos são executados em paralelo.

    
por 01.09.2014 / 18:34