這裏是myscript.sh
內容:打擊 「嚴格」 模式,箭頭(>)運算符
#!/bin/bash
set -euo pipefail
# bar is an unexisting command
bar > test
當我調用./myscript.sh
我收到以下錯誤消息(預計),
./myscript.sh: line 5: bar: command not found
但空的test
文件被創建:
-rw-r--r-- 1 spg staff 0B 23 Feb 16:32 test
我認爲通過激活「嚴格「模式(使用set -euo pipefail
的組合),找不到bar
命令的失敗將在此時停止腳本執行,而不繼續創建空的test
文件。
我想知道我怎麼能防止test
文件的創建如果表達式爲>
運營商的左側(在這種情況下,bar
)失敗。
BTW,不像Perl的嚴格模式,無論是'設置-eu'其實是一個不錯的主意是...一個非常有爭議的和持續的辯論。參見[BashFAQ#105](http://mywiki.wooledge.org/BashFAQ/105)(描述了'set -e'的一些無意的後果)和[BashFAQ#112](http://mywiki.wooledge .org/BashFAQ/112)(描述'set -u'的一些非預期後果)。 –
@CharlesDuffy這些是非常有趣的文章,感謝分享 – spg
Bash中的嚴重錯誤處理需要(1)陷阱錯誤,而不是使用'set -e'和(2)創建一種方法來處理爲什麼我在每個級別調用「exceptions」在調用層次結構中。完成之後,它允許您的腳本分辨明確處理的故障情況和錯誤之間的區別。它最終看起來像一個try/catch機制。它需要比大多數人願意投資更多的shell代碼(和更多的管理),但是它是可行的,可重用的,並且一旦實現,您就可以擺脫由於函數內部錯誤導致的返回代碼的邏輯運算符的暴政。 – Fred