Eseguire il comando Nohup con input


11

In UNIX, ho un processo che voglio eseguire usando nohup. Tuttavia, questo processo ad un certo punto attenderà al prompt in cui devo entrare yeso noaffinché continui. Finora, in UNIX ho fatto quanto segue:

nohup myprocess <<EOF
y
EOF

Quindi inizio il processo 'myprocess' usando nohup e pipe in un file con 'y' quindi chiudo il file. Le righe sopra sono effettivamente tre comandi separati - cioè premo invio sulla prima riga in UNIX, quindi ricevo un messaggio in cui inserisco 'y' e quindi premo Invio per digitare infine 'EOF' e premere di nuovo Invio. Quindi funziona perfettamente, ma il mio problema è sotto.

Voglio ora eseguire questo in Perl, ma non sono sicuro di come eseguire questo comando, poiché è su tre righe. Non so se funzionerà quanto segue:

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

questo dovrebbe funzionare nel modo in cui è scritto nella domanda (dopo che la prima modifica l'ha resa un po 'senza senso)

@hop Non so davvero di cosa tu stia parlando, la prima modifica ha aggiunto una nuova riga e ha formattato le parti della shell come codice in modo che vengano visualizzate correttamente. Non ho cambiato praticamente nulla, la revisione originale è qui
Michael Mrozek

@Michael: hai ragione e mi dispiace. ho frainteso il diff e ho pensato, avevi aggiunto i backtick. rende la domanda ancora più insensata: l'esempio dato dovrebbe funzionare.

@hop Quello perl? Supponevo che non funzionasse senza provare perché non conosco il perl, ma immagino che abbia detto "Non so se il seguente funzionerà", quindi forse va bene; dovresti probabilmente rispondere che l'esempio dato funziona
Michael Mrozek

Risposte:


19

Se vuoi solo scrivere un singolo ynello stdin del processo, puoi farlo:

(echo y | nohup myprocess) &

Se vuoi continuare a scrivere yper ogni prompt che viene visualizzato, il coreutil yesesiste esattamente per questo scopo: continuerà a scrivere qualunque cosa gli dici di stdout. L'impostazione predefinita è l'output "y", quindi puoi semplicemente:

(yes | nohup myprocess) &

ma se hai bisogno di qualcos'altro puoi passarlo come argomento


+1: non l'ho mai visto yesusato da eoni
msw

Michael, grazie per la tua pronta risposta. Tuttavia, penso di aver provato il tuo suggerimento in base al quale faccio eco a Y nel processo. Quando ho fatto questo, l'output si riversa sempre sul mio terminale nonostante il fatto che mi sia assicurato un & is in my

& Non impedisce che l'output del processo venga scritto sulla console. Lo avvia solo in background.
fschmitt,

in che modo questa risposta ha a che fare con la domanda?

@Riccardo Ho sperimentato un po 'e penso che tu abbia ragione. Risolto, grazie
Michael Mrozek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.