Wenn ich diesen Befehl eingebe
nohup CloudCompute.command &
es erzeugt das Ergebnis
[1] 782
das ist, was ich will. (Es ist übrigens die PID-Nummer)
Wenn ich also denselben Befehl in einer ausführbaren Datei ( .command
) ausführe und versuche, die Ausgabe an eine Datei anzuhängen, funktioniert es nicht. Es wird nur das ausgegebene CloudCompute.command
Ergebnis gedruckt, nicht die tatsächliche PID, die beim Ausführen angezeigt wird. Ich bin sicher, dass es sich im selben Verzeichnis befindet.
Warum passiert das? Was kann ich tun, damit die ausführbare Datei dieselbe Ausgabe erzeugt wie bei manueller Eingabe?
Danke
Antwort1
Warum passiert das?
Diese Ausgabe:
[1] 782
stammt nicht aus der ausführbaren Datei. Das ist das, was bash
ins Terminal geschrieben wird, wenn Sie etwas im Hintergrund ausführen. Es ist die Jobnummer [1]
und die PID 782
des Prozesses. Später, wenn der Prozess beendet ist, sehen Sie etwas wie:
[1]+ Done command
Dies liegt auch daran , dass bash
festgestellt wird, dass der Vorgang mit der Auftragsnummer 1 beendet ist.
Wenn ein Befehl im Hintergrund ausgeführt wird, wird die PID in der Variablen gespeichert $!
:
$ sleep 10 &
[1] 1234
$ echo $!
1234
Was kann ich tun, damit die ausführbare Datei dieselbe Ausgabe erzeugt, als wenn ich sie manuell eingebe?
Daher Ihre ausführbare DateiIstdie gleiche Ausgabe erzeugen.