Executar comando Nohup com entrada


11

No UNIX, tenho um processo que quero executar usando nohup. No entanto, em algum momento, esse processo aguardará um prompt em que eu tenho que entrar yesou noque ele continue. Até agora, no UNIX, tenho feito o seguinte:

nohup myprocess <<EOF
y
EOF

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

Quero agora executar isso no Perl, mas não sei como posso executar esse comando, pois ele tem mais de três linhas. Não sei se o seguinte funcionará:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`

isso deve funcionar do jeito que está escrito na pergunta (após a primeira edição fez um pouco sem sentido)

@hop Eu realmente não sei do que você está falando, a primeira edição adicionou uma nova linha e formatou as partes do shell como código para que elas fossem exibidas corretamente. Não mudei praticamente nada; a revisão original está aqui #
Michael Mrozek

@ Michael: você está certo e me desculpe. interpretei mal o diff e pensei: você havia adicionado os backticks. torna a pergunta ainda mais sem sentido: o exemplo dado deve funcionar.

@hop O perl? Presumi que não funcionava sem tentar, pois não conheço perl, mas acho que ele disse: "Não sei se o seguinte funcionará"; talvez esteja tudo bem; você provavelmente deveria responder que o exemplo dado funciona
Michael Mrozek

Respostas:


19

Se você quiser apenas escrever um single ypara o stdin do processo, faça o seguinte:

(echo y | nohup myprocess) &

Se você deseja continuar escrevendo ypara cada prompt que aparecer, o coreutil yesexiste exatamente para esse fim - ele continuará escrevendo o que você pedir para o stdout. Seu padrão é a saída "y", para que você possa apenas:

(yes | nohup myprocess) &

mas se você precisar de outra coisa, pode passar como argumento


+1: eu não vi yesusado em eras
msw

Michael, obrigado pela sua pronta resposta. No entanto, acho que tentei sua sugestão pela qual ecoo Y no processo. Quando eu fiz isso, a saída sempre transborda em meu terminal, apesar do fato de que eu tenho assegurado um e é no meu

O & não impede que a saída do processo seja gravada no console. Apenas o inicia em segundo plano.
Fschmitt 01/10/10

como essa resposta tem algo a ver com a pergunta?

@ Riccardo Eu experimentei um pouco e acho que você está certo. Corrigido, obrigado
Michael Mrozek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.