如何在tail -f命令后继续运行脚本

时间:2012-08-14 11:50:17

标签: bash signals tail

我有以下脚本:

tail -f nohup.out
echo 5

当我在tail -f上按 Ctrl + C 时,脚本停止运行:不打印5。在停止echo 5命令后,如何运行命令tail

6 个答案:

答案 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)

rwos所述,但添加内联陷印。

{{1}}

这可以在发出后续SIGINT信号时没有关闭putty会话(这是我的问题)

答案 4 :(得分:0)

在bash中,用单个&号结束该行,以异步方式在后台运行命令

tail -f nohup.out &

答案 5 :(得分:-1)

查找文件:在perl中使用Tail,在不同的项目中使用了几次来自动执行拖尾日志并执行特定的日志输出操作。

google ftp-upload-mon我上传到sourceforge的项目使用File:Tail to tail -f xferlogs