我經常會執行一個簡單的監控任務,如下所示:
(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