Bash
失敗後如何繼續級聯管道命令
我正在執行一個命令並使用我自己的腳本操作輸出,但我不希望主命令在我的腳本失敗時停止。
例如:
a-command | tee logfile.txt | myscript
當我的腳本中途失敗時,我查看 logfile.txt,我發現它在我的腳本停止工作的地方中斷了,但我想要的是讓 a-commmand 繼續並且 logfile.txt 擁有完整的日誌,這樣我就可以調試我的腳本並修復錯誤。
有什麼方法可以修改我的命令以將最後一個管道部分視為可選或在出現錯誤時忽略,以便前兩個部分(命令和 tee)完成它們的工作。
$$ EDIT $$
a-command
是一項漫長的任務,我的腳本基本上是在命令執行時操縱輸出以更好地報告狀態。所以我不想在a-command
完成工作後執行我的腳本。
a-command | tee logfile.txt | { myscript; cat >/dev/null; }
這將首先像往常一樣執行您的管道,直到
myscript
終止(無論出於何種原因)。那時,cat
將接管讀取,tee
直到沒有更多數據到達。讀取的數據cat
通過管道將其丟棄到/dev/null
.如果
a-command
在沒有myscript
先結束/失敗的情況下完成,myscript
將無法讀取更多數據並且可能會終止(?)。在myscript
終止點cat
開始,但由於沒有更多數據要讀取,它將立即終止並且管道將完成。解決 TooTea關於確保我們仍然獲得管道的正確退出狀態的評論:
a-command | tee logfile.txt | ( myscript; err=$?; cat >/dev/null; exit "$err" )