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?
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?
Ctrl+C sends the SIGINT signal to all the processes in the foreground process group. While
tail
is running, the process group consists of thetail
process and the shell running the script.Use the
trap
builtin to override the default behavior of the signal.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 causetail
to ignore the signal as well). The second call totrap
restores the default behavior, so that after the third line a Ctrl+C will interrupt the script again.You could just start the
tail
in a new shell, like so:As mentioned by rwos , but adding inline trapping.
This would work without closing putty session when issuing subsequent SIGINT signals (that was my problem)
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