概要
chef で使う not_if
とか only_if
は何を基準にして真偽を判定してるのかがずっと謎でした。例えば
not_if grep hoge piyo.txt
は何となく piyo.txt に hoge と書かれてなければ実行されるっぽいのですが、厳密にはどこを見て真偽を決めているのかがわかっていませんでした。
結論
実は UNIX コマンドには戻り値が存在し、それが 0 のとき true, それ以外のとき false として扱われます。
また、戻り値は端末上でコマンドを実行したあと echo $?
を実行すると確認できます。
$ ls chef-repo/
Berksfile Berksfile.lock cookbooks data_bags environments nodes readme.md roles site-cookbooks
$ echo $?
0
$ ls chef-repoooooooooooooooo/
ls: cannot access chef-repoooooooooooooooo: そのようなファイルやディレクトリはありません
$ echo $?
2
知らなかったのは自分だけでしょう。