Bash
如何在 Makefile 中擷取命令退出程式碼以供以後使用?
我有一個帶有測試套件目標的makefile,如下所示:
rcheck: foo
這會在標準輸出上顯示
foo
命令的輸出,並返回一個退出程式碼foo
,make 會照常處理該退出程式碼。我想在這個目標上添加一些東西,在不影響現有行為的情況下解析
foo
的輸出 - 即:
foo
的 stdout/stderr 應該像以前一樣顯示在 stdout/stderr 上- 就 Make 而言, rcheck 目標的最終結果是
foo
退出程式碼是什麼- stdout from
foo
應該以bar
某種方式傳遞給第二個命令。bar
的退出程式碼無關緊要,bar
除了上面的 1. 之外,不應向 stdout 或 stderr 輸出任何內容(除非解決方案意味著bar
處理 1. 本身)這裡最整潔的解決方案是什麼?
如果您不擔心數據從 foo 傳遞到 bar 的時間,並且可以使用需要在乾淨目標中處理的臨時文件,那麼只需:
rcheck: foo | tee sometempfile -bar < sometempfile >/dev/null 2>/dev/null
另一方面,如果您非常關心時間,那麼您可以讓 bar 將其輸入重複到 stdout 並嘗試以下操作:
rcheck: -(foo; echo $$? > sometempfile) | bar exit $(cat sometempfile)
我敢肯定會有更清潔的方法,但我想到了上面的方法。(注意,兩者都未經測試)