我正在尋找一種方法來忽略跨 zsh 和 bash 作業的特定退出代碼。
在我的示例中,我想忽略退出代碼134。我設法為 bash 提出了一個作業示例:
node fail.js || STATUS=$? && (if [ $STATUS == 134 ]; then true; else exit $STATUS; fi)
對此的任何改進也表示贊賞,但我的斗爭始于 zsh。此命令在 zsh 中不起作用。我發現,它||在 zsh 中用于拆分命令,但我還沒有找到與我希望它作業的方式等效的方法。
uj5u.com熱心網友回復:
如果您的目的是讓腳本在節點解釋器沒有失敗的情況下繼續運行,則可能如下所示:
node fail.js || { rc=$?; if [[ $rc != 134 ]]; then exit "$rc"; fi; }
uj5u.com熱心網友回復:
your_command || (exit "$(($? == 134 ? 0 : $?))")
這exit在子外殼中用于將 134 的退出狀態更改為 0,否則如果your_command失敗則傳遞該值。
$(( expr ))用于外殼算術擴展。在這種情況下,諸如二元==和條件?:三元之類的運算子是標準的。
我不認為這||會是 zsh 的問題。也許使用非標準==運算子 with[而不是[[。Zsh 在使用[或時嘗試符合 POSIX 標準test。
man zshbuiltins說test/ [:
該命令嘗試在指定的位置實作 POSIX 及其擴展。不幸的是,語法中存在內在的歧義;特別是測驗運算子和類似它們的字串之間沒有區別。該標準試圖解決這些問題的少量引數(最多四個);不能依賴五個或更多引數的兼容性。敦促用戶盡可能使用
[[沒有這些歧義的測驗語法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/361172.html
下一篇:切片陣列變平為len=1?
