Bash 如何在tail-f命令后继续运行脚本
我有以下脚本:Bash 如何在tail-f命令后继续运行脚本,bash,signals,tail,Bash,Signals,Tail,我有以下脚本: tail -f nohup.out echo 5 当我在tail-f上按Ctrl+C时,脚本停止运行:未打印5。停止tail命令后,如何运行命令echo 5。Ctrl+C将信号发送到前台的所有进程。运行tail时,进程组由tail进程和运行脚本的shell组成 #!/bin/bash trap "echo 5" SIGINT SIGTERM tail -f nohup.out 使用内置来覆盖信号的默认行为 trap " " INT tail -f nohup.out trap
tail -f nohup.out
echo 5
当我在tail-f
上按Ctrl+C时,脚本停止运行:未打印5
。停止tail
命令后,如何运行命令echo 5
。Ctrl+C将信号发送到前台的所有进程。运行tail
时,进程组由tail
进程和运行脚本的shell组成
#!/bin/bash
trap "echo 5" SIGINT SIGTERM
tail -f nohup.out
使用内置来覆盖信号的默认行为
trap " " INT
tail -f nohup.out
trap - INT
echo 5
陷阱的代码不起任何作用,因此如果shell接收到SIGINT,它将前进到下一个命令(
echo 5
)。请注意,第一行中的引号之间有一个空格;任何不执行任何操作的shell代码都将起作用,除了一个表示完全忽略信号的空字符串(这不能使用,因为这将导致tail
也忽略信号)。第二次调用trap
将恢复默认行为,这样在第三行之后,Ctrl+C将再次中断脚本。您可以在新的shell中启动尾部,如下所示:
#!/bin/bash
bash -i -c 'tail -f nohup.out'
echo 5
查找文件:Tail在perl中,已经在不同的项目中多次使用它来自动跟踪日志并为日志输出执行特定操作
google ftp upload mon是我上传到sourceforge的一个项目,它使用文件:Tail-to-Tail-f xferlogs,如所述,但添加了内联补漏白
bash -i -c "trap ' ' SIGINT; tail -F '$1'; trap - SIGINT"
在bash中发出后续SIGINT信号时(这是我的问题)不关闭putty会话,就可以用一个符号结束行,并以异步方式在后台运行命令
tail -f nohup.out &
你不能诱捕SIGKILL,这里的SIGKILL被忽略了。这仅在shell接收到SIGINT或SIGTERM时打印echo 5
,而不是在tail
由于其他原因存在时打印(因为文件不存在,或者因为tail
被显式终止)。您可以添加伪信号EXIT
,但这不是一种可读性很强的方式来指定echo 5
在tail
之后执行。