Beenden Sie das Tail, wenn der andere Prozess abgeschlossen ist.

Beenden Sie das Tail, wenn der andere Prozess abgeschlossen ist.

Ich habe

parallel --j 2 -- "sh script1" "sh script2"

wo script1und script2loggen Sie sich in Dateien ein log1undlog2

Ich möchte dies ändern in:

parallel --j 3 -- "sh script1" "sh script2" "tail -f log1 log2"

Der Grund für die Verwendung von Tail liegt darin, dass die Ausgabe der beiden Skripte gleichzeitig auf dem Bildschirm chaotisch wird und ich den Cursor verliere usw. – ich muss das Terminal fast nach jeder Ausführung neu starten.

Das Problem ist jedoch, dass dies jetzt ewig dauern wird und ich möchte, dass Tail beendet wird, wenn Skript1 und Skript2 fertig sind. Wie kann ich das machen?

Antwort1

Das vielleichtAuchnicht das sein, was Sie wollen, aber wie wäre es mit:

parallel --j 2 -- "sh script1" "sh script2"; tail log1 log2

Sobald beide Jobs abgeschlossen sind, wird die Wartezeit tailbeider Protokolldateien aufgehoben.

Antwort2

tatsächlich habe ich gefunden, was ich tun muss:

parallel --j 2 -- "sh script1" "sh script2" &
PID=$!
tail --pid=$PID -f log1 log2

Antwort3

ich würde ... benutzenMehrschwanzodertmux.

Antwort4

parallel --j 2 -- "sh script1" "sh script2" & tail -f log1 log2

Dies läuft parallel ...im Hintergrund und wird dann ausgeführt tail ....

Durch Drücken Ctrl-Cauf den Schwanz wird die Arbeit nicht beeinträchtigt parallel.

parallelWenn Sie den in den Vordergrund bringen müssen , beenden Sie den tailund geben Sie ein fg. Um ihn wieder in den Hintergrund zu schicken (z. B. damit Sie ihn tailnoch einmal ausführen können), drücken Sie Ctrl-Zund geben Sie ein bg. Oder Sie beenden ihn mitkill %%

Weitere Einzelheiten finden Sie in der Shell-Dokumentation. Wenn Sie z. B. Bash verwenden, führen Sie man bash(alles in Großbuchstaben) aus und suchen Sie danach JOB CONTROL.

verwandte Informationen