我在我的腳本中使用了一個簡單的bash序言這樣的功能:使用set -e /套+ E在bash與
#!/bin/bash
set -e
與模塊結合/使用此功能現在已經咬傷了我。
所以,說我有一個像
foo() {
#edit: some error happens that make me want to exit the function and signal that to the caller
return 2
}
某處功能理想情況下,我想能夠使用多個小文件,包括其他文件中的函數,然後調用這些功能,如
set +e
foo
rc=$?
set -e
。這適用於兩層例程。但是如果foo也調用這樣的子例程,返回前的最後一個設置將是set -e
,這將使腳本退出 - 我不能在調用函數中重寫此函數。所以,我不得不這樣做是
foo() {
#calling bar() in a shielded way like above
#..
set +e
return 2
}
我覺得這非常違反直覺的(也是不是我想要的 - 如果在某些情況下我想使用的功能,不帶屏蔽免遭失敗,而在其他情況下什麼我想處理清理?)處理這個問題的最佳方法是什麼?順便說一句。我在OSX上這樣做,我沒有測試這種行爲在Linux上是不同的。
等待,你能擴大嗎?我在呼叫者中添加了這個嗎?結腸是做什麼的? –
你能否擴展我如何濫用回報?我怎麼打算在函數內發出錯誤信號呢? (對不起,如果我不夠清楚 - 'return 2'只能在錯誤情況下完成。 –
你不是,但我以爲你是我的壞人,對不起。 – Carpetsmoker