Führen Sie den Nohup-Befehl mit Eingabe aus

11

Unter UNIX habe ich einen Prozess, den ich mit nohup ausführen möchte. Dieser Vorgang wartet jedoch irgendwann an einer Eingabeaufforderung, an der ich ihn eingeben muss, yesoder nodarauf, dass er fortgesetzt wird. Bisher habe ich unter UNIX Folgendes getan:

nohup myprocess <<EOF
y
EOF

Also starte ich den Prozess 'myprocess' mit nohup und Pipe in einer Datei mit 'y' und schließe die Datei. Die obigen Zeilen sind praktisch drei separate Befehle - dh ich drücke in der ersten Zeile unter UNIX die Eingabetaste, erhalte eine Eingabeaufforderung, in der ich 'y' eingebe, drücke die Eingabetaste, um schließlich 'EOF' einzugeben und erneut die Eingabetaste zu drücken. Das funktioniert also perfekt, aber mein Problem ist unten.

Ich möchte dies jetzt in Perl ausführen, bin mir aber nicht sicher, wie ich diesen Befehl ausführen kann, da er mehr als drei Zeilen umfasst. Ich weiß nicht, ob Folgendes funktioniert:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`
Jeff Schaller
quelle
Dies sollte so funktionieren, wie es in der Frage geschrieben steht (nachdem die erste Bearbeitung es etwas unsinnig gemacht hat)
@hop Ich weiß wirklich nicht, wovon du sprichst. Bei der ersten Bearbeitung wurde eine neue Zeile hinzugefügt und die Shell-Teile als Code formatiert, damit sie richtig angezeigt werden. Ich habe praktisch nichts geändert, die ursprüngliche Revision ist hier
Michael Mrozek
@ Michael: Du hast recht und es tut mir leid. Ich habe den Diff falsch interpretiert und dachte, du hättest die Backticks hinzugefügt. macht die Frage noch unsinniger: Das gegebene Beispiel sollte funktionieren.
@hop Der Perl? Ich nahm an, dass es nicht funktioniert hat, ohne es zu versuchen, da ich Perl nicht kenne, aber ich denke, er sagte "Ich weiß nicht, ob das Folgende funktionieren wird", also ist es vielleicht in Ordnung; Sie sollten wahrscheinlich nur antworten, dass das gegebene Beispiel funktioniert
Michael Mrozek

Antworten:

19

Wenn Sie nur eine Single yin den Standard des Prozesses schreiben möchten , können Sie dies tun:

(echo y | nohup myprocess) &

Wenn Sie yfür jede Eingabeaufforderung weiter schreiben möchten , ist das Coreutil yesgenau für diesen Zweck vorhanden. Es schreibt weiterhin alles, was Sie stdout mitteilen. Standardmäßig wird "y" ausgegeben, sodass Sie einfach:

(yes | nohup myprocess) &

Aber wenn Sie etwas anderes brauchen, können Sie es als Argument übergeben

Michael Mrozek
quelle
+1: Ich habe yesseit Äonen nicht mehr gesehen
msw
Michael, danke für deine schnelle Antwort. Ich glaube jedoch, ich habe Ihren Vorschlag ausprobiert, wobei ich Y in den Prozess einfließen lasse. Wenn ich das getan habe, wird die Ausgabe immer auf mein Terminal übertragen, obwohl ich sichergestellt habe, dass ein & in meinem
Das & verhindert nicht, dass die Prozessausgabe in die Konsole geschrieben wird. Es startet es einfach im Hintergrund.
fschmitt
Wie hat diese Antwort etwas mit der Frage zu tun?
@ Riccardo Ich habe ein wenig experimentiert und ich denke du hast recht. Behoben, danke
Michael Mrozek