linux删除文件退出,在Linux中用于在移动或删除文件时使`tail -f`退出的bash脚本
目前刪除,移動(dòng)或重命名在其上運(yùn)行tail -f的文件什么都不做,我希望它能夠中止.我已經(jīng)閱讀了手冊(cè)頁(yè),似乎-f應(yīng)該在文件移動(dòng)時(shí)中止,-F將跟隨文件,但在Mac OS X上似乎-f和-F是相同的.如何編寫一個(gè)bash腳本,在文件移動(dòng)后使tail -f完全退出?
>在
Linux上,你可以使用tail –follow = name(而不僅僅是-f,相當(dāng)于–follow = descriptor)來(lái)實(shí)現(xiàn)你想要的,但是只有文件是DELETED而不是移動(dòng) – 一旦文件刪除,報(bào)告錯(cuò)誤消息并退出尾部(代碼1);遺憾的是,相比之下,如果文件僅僅是MOVED(重命名),則tail不會(huì)退出 – 需要一個(gè)程序化的解決方案.
>在OSX上,您始終需要一個(gè)程序化解決方案 – 無(wú)論文件是移動(dòng)還是刪除.
一旦目標(biāo)文件不再存在(以其原始名稱)退出尾部的bash腳本 – 來(lái)自@ schellsan自己答案的更強(qiáng)大的腳本表達(dá)式:
#!/usr/bin/env bash
tail -f "$1" & # start tailing in the background
while [[ -f $1 ]]; do sleep 0.1; done # periodically check if target still exists
kill $! 2>/dev/null || : # kill tailing process, ignoring errors if already dead
>正確處理需要引用的文件名(例如,帶有嵌入空格的名稱).
>通過(guò)在文件存在檢查之間休眠來(lái)防止創(chuàng)建緊密循環(huán) – 根據(jù)需要調(diào)整睡眠持續(xù)時(shí)間;警告:一些平臺(tái)只支持積分秒.
如果需要更強(qiáng)大的穩(wěn)定性,這里有一個(gè)版本:
>通過(guò)退出陷阱殺死后臺(tái)進(jìn)程,以確保它被殺死,無(wú)論腳本本身如何退出(通常,或者說(shuō),通過(guò)Control-C).
>如果發(fā)現(xiàn)后臺(tái)進(jìn)程不再存在,則退出腳本.
#!/usr/bin/env bash
# Set an exit trap to ensure that the tailing process
# - to be created below - is terminated,
# no matter how this script exits.
trap '[[ -n $tailPid ]] && kill $tailPid 2>/dev/null' EXIT
# Start the tailing process in the background and
# record its PID.
tail -f "$1" & tailPid=$!
# Stay alive as long as the target file exists.
while [[ -f $1 ]]; do
# Sleep a little.
sleep 0.1
# Exit if the tailing process died unexpectedly.
kill -0 $tailPid 2>/dev/null || { tailPid=; exit; }
done
總結(jié)
以上是生活随笔為你收集整理的linux删除文件退出,在Linux中用于在移动或删除文件时使`tail -f`退出的bash脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux可以ping通,Linux可以
- 下一篇: linux性能测试命令h,Linux性能