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使用者と繋がりたい...)