Bem, a verdadeira questão é qual entrada você realmente quer enviar para o seu SCRIPT. Se você quer que ele tenha uma entrada vazia, então execute:
$SCRIPT < /dev/null
Se você quiser dar uma entrada específica, como o conteúdo de $ size, execute:
echo "$size" | $SCRIPT
Se você quiser digitar a entrada, então terá que colocá-la de volta no forground para digitar sua entrada e depois colocá-la novamente em segundo plano. A capacidade de fazer isso depende se o seu shell tem controle de trabalho (a maioria faz, mas o shell Bourne original não). Faça isso:
- Execute
fg %watcher
ou fg %1
(usando o número da tarefa que você vê após executar jobs -l
) para colocar o processo em primeiro plano.
- Digite a entrada desejada e retorne.
- Digite control-Z para colocá-lo de volta no segundo plano (ou use
stty -a
e verifique susp
para ver qual é o caractere de parada).
- Após o programa ser interrompido pelo controle-Z, coloque-o de volta no background com
bg %1
(ou qualquer que seja o número).
Ainda outra resposta seria ter um pipe nomeado. Aqui está um exemplo (usando tr
no lugar do seu script apenas para mostrar):
$ mkfifo my_fifo
$ tr a-z A-Z < my_fifo &
$ exec 6> my_fifo
$ echo here is some input for the fifo >&6
$ HERE IS SOME INPUT FOR THE FIFO
Primeiro, você executa o script, tomando como entrada o fifo (importante para executar o script primeiro). Então exec 6> ...
faz o descritor de arquivo 6 do shell gravar no fifo. Então, sempre que você quiser enviar a saída, escreva-a no descritor de arquivo 6 (via >&6
). Observe o final "aqui está ..." não foi digitado por mim, apenas foi a saída de tr.