我经常会运行如下简单的监控任务:
(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