考慮以下 Bash 腳本:
#!/usr/bin/env bash
set -o errexit pipefail
shopt -s inherit_errexit
( echo hello ; exit 1 ) | cat
echo world
運行5.0.17版本,輸出如下:
hello
world
但是,負責列印的子shellhello將失敗,退出狀態為非零。管道的一部分,啟用選項pipefail,整個管道應該同樣失敗,具有相同的狀態(管道中的后續專案當然會自行回傳零狀態)。因此,管道應該評估為非零狀態,由于errexit(如果不是inherit_errexit那么好)將提示立即終止腳本,而不會到達最終陳述句列印world。
如所見,未達到最終列印陳述句的預測是不準確的。
為什么?
uj5u.com熱心網友回復:
您只是在errexit設定設定,而不是pipefail. 后面不能放多個選項-o,需要重復-o選項。其他所有內容都被放入位置引數中。
所以改變
set -o errexit pipefail
到
set -o errexit -o pipefail
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426442.html
