Execute o comando Nohup com entrada

10

No UNIX, tenho um processo que quero executar usando o nohup. No entanto, esse processo aguardará em algum momento em um prompt no qual devo inserir yes ou no para continuar. Até agora, no UNIX, tenho feito o seguinte:

nohup myprocess <<EOF
y
EOF

Então eu inicio o processo 'myprocess' usando nohup e pipe em um arquivo com 'y' e fecho o arquivo. As linhas acima são efetivamente três comandos separados - ou seja, eu apertei enter na primeira linha no UNIX, então eu recebo um prompt onde eu digito 'y' e então pressiono enter para então finalmente digitar 'EOF' e apertar return novamente. Então, isso funciona perfeitamente, mas meu problema está abaixo.

Eu quero agora executar isso em Perl, mas não tenho certeza de como posso executar esse comando, já que ele tem mais de três linhas. Não sei se o seguinte funcionará:

my $startprocess = 'nohup myprocess <<EOF &
y
EOF
'
    
por Jeff Schaller 01.10.2010 / 03:11

1 resposta

19

Se você quiser apenas escrever um único y para o stdin do processo, você pode fazer isso:

(echo y | nohup myprocess) &

Se você quiser continuar escrevendo y para cada prompt que apareça, o coreutil yes existe exatamente para esse propósito - ele continuará escrevendo o que quer que você diga para o stdout. Seu padrão é a saída "y", então você pode apenas:

(yes | nohup myprocess) &

mas se você precisar de algo mais, pode passá-lo como um argumento

    
por 01.10.2010 / 03:19