Bash

如何在 Makefile 中擷取命令退出程式碼以供以後使用?

  • February 11, 2015

我有一個帶有測試套件目標的makefile,如下所示:

rcheck:
       foo

這會在標準輸出上顯示foo命令的輸出,並返回一個退出程式碼foo,make 會照常處理該退出程式碼。

我想在這個目標上添加一些東西,在不影響現有行為的情況下解析foo的輸出 - 即:

  1. foo的 stdout/stderr 應該像以前一樣顯示在 stdout/stderr 上
  2. 就 Make 而言, rcheck 目標的最終結果是foo退出程式碼是什麼
  3. stdout fromfoo應該以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)

我敢肯定會有更清潔的方法,但我想到了上面的方法。(注意,兩者都未經測試)

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