強制後台複雜任務 fg 本身?

強制後台複雜任務 fg 本身?

我經常會執行一個簡單的監控任務,如下所示:

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

是否可以讓進程本身部分去後台?例如,要取得作業 ID $jobid(或類似的),然後在sleep完成時執行fg $jobid?

我知道,這可能需要一些更複雜的 bash-fu,但任何解決方案都會很高興看到(特別是如果只有在fg沒有其他互動式進程運行的情況下才有可能)。

答案1

非互動式腳本預設關閉作業控制,但您可以使用set -m或啟用它set -o monitor。這是一個範例腳本:

# 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"

這是使用追蹤 ( ) 運行時的輸出bash -x script.sh

+ 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

相關內容