Ksh

如何從tail -f返回到底層腳本

  • April 27, 2015

我有一個ksh腳本,tail -f用於查看日誌文件。

如何終止tail程序並繼續執行底層腳本?

我在 AIX 7.1 上執行它。

                                            • -編輯 - - ——————————————-

根據 Gilles 的回答,我在我的腳本中嘗試了這個:

trap 'echo "tail process terminated!"' 2
tail -f mylog.log
trap - 2

現在執行tail命令後,然後按CTRL+C,tail程序被殺死,我的腳本繼續執行。但是新的問題是,當我再次按 CTRL+C 時,我的腳本不會退出。任何人都可以幫忙嗎?

的關鍵tail -f是永遠執行直到被明確殺死,所以你必須安排殺死它。

如果有一些邏輯決定何時終止tail程序,則獲取程序 IDtail並安排在需要時觸發它的終止。例如,如果你想在一分鐘後殺死它:

tail -f file.log &
tail_pid=$!
sleep 60
kill $tail_pid
do_more_stuff

如果您想在使用者按下+tail時終止而不是 shell 腳本,請擷取SIGINT信號。您需要將陷阱設置為非空字元串(任何非空值都可以,甚至是空格),因為空字元串會導致 SIGINT 被子程序以及呼叫 shell 忽略。Ctrl``C``tail

trap : INT       # set a signal handler for SIGINT that does nothing
tail -f file.log
do_more_stuff    # executed when tail is killed, e.g. by the user pressing Ctrl+C
trap - INT       # reset SIGINT to killing the script

如果您不在tail腳本中執行命令,shell 將等待它退出,這永遠不會發生。

如果你有其他工作要做,之後你想殺死tail命令,你可以

tail -f logfile &
tailpid=$!
...do some other stuff...
kill $tailpid
...carry on...

引用自:https://unix.stackexchange.com/questions/145656