Exécuter la commande Nohup avec entrée

11

Sous UNIX, j'ai un processus que je veux exécuter à l'aide de nohup. Cependant, ce processus attendra à un moment donné à une invite où je dois entrer yesou nopour qu'il continue. Jusqu'à présent, sous UNIX, j'ai fait ce qui suit:

nohup myprocess <<EOF
y
EOF

Je lance donc le processus 'myprocess' en utilisant nohup et pipe dans un fichier avec 'y' puis ferme le fichier. Les lignes ci-dessus sont en fait trois commandes distinctes - c'est-à-dire que j'appuie sur Entrée sur la première ligne sous UNIX, puis je reçois une invite où j'entre «y», puis appuyez sur Entrée pour enfin taper «EOF» et appuyez à nouveau sur Retour. Cela fonctionne donc parfaitement, mais mon problème est ci-dessous.

Je veux maintenant l'exécuter en Perl, mais je ne sais pas comment exécuter cette commande, car elle se déroule sur trois lignes. Je ne sais pas si cela fonctionnera:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`
Jeff Schaller
la source
cela devrait fonctionner de la façon dont il est écrit dans la question (après la première modification, cela a rendu un peu absurde)
@hop Je ne sais vraiment pas de quoi vous parlez, la première modification a ajouté une nouvelle ligne et formaté les parties de la coque en tant que code afin qu'elles s'affichent correctement. Je n'ai pratiquement rien changé, la révision originale est
Michael Mrozek
@Michael: vous avez raison et je suis désolé. j'ai mal interprété le diff et pensé, vous aviez ajouté les backticks. rend la question encore plus absurde: l'exemple donné devrait fonctionner.
@hop Le Perl One? J'ai supposé que cela ne fonctionnait pas sans essayer car je ne connaissais pas perl, mais je suppose qu'il a dit "je ne sais pas si ce qui suit fonctionnera", alors peut-être que c'est bien; vous devriez probablement juste répondre que l'exemple donné fonctionne
Michael Mrozek

Réponses:

19

Si vous voulez juste écrire un single ydans le stdin du processus, vous pouvez le faire:

(echo y | nohup myprocess) &

Si vous souhaitez continuer à écrire ypour chaque invite qui apparaît, le coreutil yesexiste exactement à cette fin - il continuera à écrire tout ce que vous lui direz à stdout. Sa valeur par défaut est de sortir "y", vous pouvez donc simplement:

(yes | nohup myprocess) &

mais si vous avez besoin d'autre chose, vous pouvez le passer comme argument

Michael Mrozek
la source
+1: Je n'ai pas vu yesutilisé depuis des éons
msw
Michael, merci pour votre réponse rapide. Cependant, je pense que j'ai essayé votre suggestion par laquelle je fais écho à Y dans le processus. Quand j'ai fait cela, la sortie se déverse toujours sur mon terminal malgré le fait que je me suis assuré qu'un & est dans mon
Le & n'empêche pas la sortie du processus d'être écrite sur la console. Il démarre juste en arrière-plan.
fschmitt
comment cette réponse a-t-elle quelque chose à voir avec la question?
@Riccardo J'ai un peu expérimenté, et je pense que vous avez raison. Corrigé, merci
Michael Mrozek