我想使用這種方法忽略紗線錯誤
yarn install 2> >(grep -v warning 1>&2)
當我使用fish shell時,我確實發現這個命令必須成為yarn install 2> ">(grep -v warning 1>&2)"避免語法錯誤
但是,在我想跑步之后yarn run postinstall --force
所以我的命令變成yarn install 2> ">(grep -v warning 1>&2)" && yarn run postinstall --force了,但它似乎不起作用,yarn run postinstall --force并沒有真正運行。命令在完成后yarn install立即完成。
任何想法如何解決?
更新:我還希望該腳本在 bash 中運行,因為這不僅會在我的本地開發機器上執行,還會在沒有安裝 fish-shell 的 CD/CI 上執行。
uj5u.com熱心網友回復:
編輯:這個問題最初被標記為“魚”,所以這個答案假設你想使用魚來運行腳本。
yarn install 2> >(grep -v warning 1>&2)
這是一個有點尷尬的成語。它將 stderr 的管道傳遞yarn install給行程替換(>()語法,就像它的<()表親的相反)。這將創建一個臨時檔案,然后它將連接到grep -v的標準輸入,然后將其輸出再次重定向到標準錯誤。效果是標準錯誤被過濾,任何包含“警告”的行都被洗掉。
確實,這樣做的原因是在 bash 中管道 stderr 而不是 stdout 很尷尬 - 請參閱如何管道 stderr,而不是 stdout?- 這是https://stackoverflow.com/a/15936384/3150338。
在魚中,您可以使用以下命令對 stderr 進行管道傳輸2>|:
yarn install 2>| grep -v warning 1>&2
參見例如
function printstuff
echo error >&2
echo warning >&2
echo output
echo warning but on stdout
end
printstuff 2>| grep -v warning 1>&2
這將在標準錯誤上列印“錯誤”,在標準輸出上列印“輸出”和“警告但在標準輸出上”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492676.html
上一篇:Bash:5分鐘后構建失敗
