how to continue run script after tail -f command

天涯浪子 提交于 2020-04-07 03:22:57

问题


I have the following script:

tail -f nohup.out
echo 5

When I press Ctrl+C on tail -f, the script stops running: the 5 is not printed. How can I run the command echo 5 after I stop the tail command?


回答1:


Ctrl+C sends the SIGINT signal to all the processes in the foreground process group. While tail is running, the process group consists of the tail process and the shell running the script.

Use the trap builtin to override the default behavior of the signal.

trap " " INT
tail -f nohup.out
trap - INT
echo 5

The code of the trap does nothing, so that the shell progresses to the next command (echo 5) if it receives a SIGINT. Note that there is a space between the quotes in the first line; any shell code that does nothing will do, except an empty string which would mean to ignore the signal altogether (this cannot be used because it would cause tail to ignore the signal as well). The second call to trap restores the default behavior, so that after the third line a Ctrl+C will interrupt the script again.




回答2:


#!/bin/bash
trap "echo 5" SIGINT SIGTERM
tail -f nohup.out



回答3:


You could just start the tail in a new shell, like so:

#!/bin/bash
bash -i -c 'tail -f nohup.out'
echo 5



回答4:


As mentioned by rwos , but adding inline trapping.

bash -i -c "trap ' ' SIGINT; tail -F '$1'; trap - SIGINT"

This would work without closing putty session when issuing subsequent SIGINT signals (that was my problem)




回答5:


Look up File:Tail in perl, have used this a few times on different projects to automate tailing logs and carrying out a specific action for log output.

google ftp-upload-mon a project I uploaded to sourceforge which uses File:Tail to tail -f xferlogs



来源:https://stackoverflow.com/questions/11951655/how-to-continue-run-script-after-tail-f-command

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!