我正在编写将从可移动媒体运行的脚本,但要求在执行期间卸载此媒体。它不能直接做,因为媒体很忙。因此,我将脚本拆分为两部分 - 一部分在卸载之前运行,一部分是将第二部分复制到ramfs并启动它,第二部分是卸载madia,然后执行工作然后自行删除并卸载creted ramfs。但问题是异步脚本是在bash的前台启动时启动的,我不知道这个脚本如何能够以编程方式将自己置于前台以获取用户输入。
所以我需要这样的东西:
script1 does his job
script1 starts script2
script1 dies
script2 goes to foreground
script2 unmounts media with script1
script2 does his job
scirpt2 starting async command and dies
async command unmounts ramfs
答案 0 :(得分:1)
您想要wait
:
script1 &
JOB_SCRIPT1=$!
script2 &
JOB_SCRIPT2=$!
wait $JOB_SCRIPT1
echo "this action takes place after script1 but perhaps during script2"
wait $JOB_SCRIPT2
echo "now both jobs are complete"
async command unmounts ramfs
然而,这似乎并不能完全符合您的要求;似乎有一些后台工作由script1
分散。这更难控制。或许可以在没有参数的情况下尝试wait
,看看是否可以找到有后台进程的事实(但我可疑,因为他们不是同一个shell的一部分):
script1 &
wait
script2
async command unmounts ramfs
(这个版本中的&符号实际上不应该做任何事情,但可能会让shell变成你想要的东西。你必须尝试一下才能看到它。)