有2个bash脚本:
script.sh
#!/bin/bash
# Set terminal interrupt signal to 'ctrl+]'
stty intr ^]
for i in $(seq 1 1000); do \
echo $i;
sleep 1;
done;
script_runner.sh
#!/bin/bash
echo BEGIN
./script.sh
echo END
这是它的工作方式:
同时,我希望父母可以继续工作并打印“ END”。
如何实现?
P.S。我尝试使用“退出”信号代替“ intr”,但是我不确定这样做是否合法。
答案 0 :(得分:1)
您可以将SIGINT转发到您的子进程。以这种方式更改script_runner.sh
:
#!/bin/bash
sigint () { kill -INT -$$; }
trap sigint INT
echo BEGIN
./script.sh
echo END
script_runner.sh
获得SIGINT时,会将其转发到进程组中的所有进程。这将终止子外壳程序和sleep
。
更新
正如William所说,这也足够了:
#!/bin/bash
trap : INT
echo BEGIN
./script.sh
echo END