强制后台复杂任务自行运行?

强制后台复杂任务自行运行?

我经常会运行如下简单的监控任务:

(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

相关内容