bash-oo-frameworkとは
bash-oo-framework
は、とてもすごいbash用のフレームワークです。
- オブジェクト指向
- ロギング
- テストフレームワーク
- 関数型
など様々な機能に対応しています。
英語読める方はこちら: niieani/bash-oo-framework
日本語版のREADMEを作成中ですので気になったらみてみてください Cj-bc/bash-oo-framework:feature/japanese-docs
ちなみに、高度なことをやっているだけあって、コードリーディングをするだけでもかなり為になります。
bash好きな人は是非。
vimwiki
持ってる方は、こちらをwikiとして登録してもらえば、僕のコードリーディングをいくらか見ることができます。(気付きやら何やら少し書いてます。)参考になれば幸いです。
で、現在の問題点。
Qiita書く気が失せる前にパパッとやりたいので簡潔に行きます。
oo-framework知っている人を前提に話します(当たり前だけど)。
現在、classblib
とそれを呼び出すmain
関数があります。
blib
側で例外を吐くので、それをmain
で捕捉し処理する形で書いていました。
が、main
自身が例外を吐く...(おそらくフレームワークのバグです。)
単純にtryCatch
で囲むとstatus codeが取れなくなる。かといってtryCatch
内はサブシェルになっているため、変数に格納することもできません。
どうしたものか...
現状の回答
若干トリッキーですが今回はこのような対策をとりました
function main() {
# 省略
}
try {
main $@
e="$?" throw
} catch {
exit ${__EXCEPTION__[1]}
}
つまり、 main関数の戻り値を捕捉し、それを例外として投げてexit
に渡すということです。
こうすればmain
が例外吐いても対処できますし、status code失うこともありません。
もっとスマートに書きたい(というかそもそもmain
に例外を吐いて欲しくない)のですが現状はこれが精一杯かなと。
超雑ですがもしも誰かの役に立てれば幸いです。(そして同じ問題に直面した人、是非連絡ください...日本人のoo-framework使用者と繋がりたい...)