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
`

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


+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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.