如何在脚本中将作业置于前台?

如何在脚本中将作业置于前台?

我想启动一个测试,然后稍等一下,然后使用 shell 脚本启动一个程序:

#!/bin/bash
sleep 3 &  # test
sleep 1    # wait some
sleep 4 &  # run program under test
fg 1       # <-- I want to put test back in "foreground", but yields "line 5: fg: no job control"

我想我误解了“前景”的含义,但是还有其他方法可以做到我想要的吗? (我尝试用jobs -xand作为前缀nohup,但我怀疑我的误解更深了。)

答案1

您只需在 shell 中启用作业控制即可set -m

#!/bin/bash
set -m
sleep 3 &  # test
sleep 1    # wait some
sleep 4 &  # run program under test
jobs
fg %1

引用 bash 手册:

-m

监控模式。作业控制已启用。对于支持它的系统上的交互式 shell,此选项默认处于启用状态(请参阅上面的作业控制)。后台进程在单独的进程组中运行,并在完成时打印包含其退出状态的行。

答案2

#!/bin/bash

sleep 3 & sleep_pid=$!
sleep 1
sleep 4 &
wait "$sleep_pid"

将其放在sleep 3前台相当于等待它完成。我假设这就是你想要做的(或者至少这是影响您正在寻找的),这就是上面脚本的作用。它通过将作业的 PID 保存在变量中sleep_pid,然后在调用中使用该值来实现此目的wait

相关内容