我想启动一个测试,然后稍等一下,然后使用 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 -x
and作为前缀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
。