Erzwingen Sie eine komplexe Hintergrundaufgabe, um sich selbst zu bearbeiten.

525
warren

Ich werde oft eine einfache Überwachungsaufgabe wie die folgende ausführen:

(sleep 600 && ls -lh /path/to/files)& 

Ist es möglich, den Prozess selbst zu deinstallieren? Um beispielsweise die Job-ID zu übernehmen $jobid(oder ähnliches), und dann, wenn der sleepVorgang abgeschlossen ist, ein fg $jobid?

Ich bin mir dessen bewusst, dass dies etwas komplexeres bash-fu erfordert, aber jede Lösung wäre schön zu sehen (insbesondere wenn dies nur möglich ist, fgwenn kein anderer interaktiver Prozess ausgeführt wird).

0

1 Antwort auf die Frage

1
Kusalananda

Bei einem nicht interaktiven Skript ist die Jobsteuerung standardmäßig deaktiviert, Sie können sie jedoch mit set -moder aktivieren set -o monitor. Hier ist ein Beispielskript:

# turn on job control set -o monitor  # start a background task ( sleep 10 && echo "slept 10 seconds" ) &  # do something else sleep 5 echo "slept 5 seconds"  # bring the background task into the foreground fg  echo "done" 

Hier ist seine Ausgabe, wenn mit tracing ( bash -x script.sh) ausgeführt wird:

+ set -o monitor + sleep 5 + sleep 10 + echo 'slept 5 seconds' slept 5 seconds + fg ( sleep 10 && echo "slept 10 seconds" ) + echo 'slept 10 seconds' slept 10 seconds + echo done done