Ksh
如何從tail -f返回到底層腳本
我有一個
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...