我有以下脚本:
tail -f nohup.out
echo 5
当我在tail -f
上按 Ctrl + C 时,脚本停止运行:不打印5
。在停止echo 5
命令后,如何运行命令tail
?
答案 0 :(得分:8)
Ctrl + C 将SIGINT信号发送到前台process group中的所有进程。当tail
正在运行时,进程组由tail
进程和运行脚本的shell组成。
使用trap
内置来覆盖信号的默认行为。
trap " " INT
tail -f nohup.out
trap - INT
echo 5
陷阱的代码不执行任何操作,因此如果shell收到SIGINT,则会进入下一个命令(echo 5
)。请注意,第一行中的引号之间有一个空格;任何不执行任何操作的shell代码都会这样做,除了一个空字符串,这意味着完全忽略该信号(这不能使用,因为它会导致tail
忽略该信号)。第二次调用trap
恢复默认行为,因此在第三行之后 Ctrl + C 将再次中断脚本。
答案 1 :(得分:1)
#!/bin/bash
trap "echo 5" SIGINT SIGTERM
tail -f nohup.out
答案 2 :(得分:0)
您可以在新shell中启动tail
,如下所示:
#!/bin/bash
bash -i -c 'tail -f nohup.out'
echo 5
答案 3 :(得分:0)
答案 4 :(得分:0)
在bash中,用单个&号结束该行,以异步方式在后台运行命令
tail -f nohup.out &
答案 5 :(得分:-1)
查找文件:在perl中使用Tail,在不同的项目中使用了几次来自动执行拖尾日志并执行特定的日志输出操作。
google ftp-upload-mon我上传到sourceforge的项目使用File:Tail to tail -f xferlogs