Posted at

bashのスクリプトを書くときはshebangで-xeを指定するよりset -xeした方がよさそう

例えばこういうスクリプトを書いたとします。


tmp.sh

#!/bin/bash -xe

ls | grep 'ababababababa'

echo 'abcd'


grepは存在しなければexit codeとして1を返します。なので下のechoは実行されないはずです。

しかし以下のように実行するとechoが実行されてしまいます。

bash tmp.sh

bashをつけて実行するとshebangの指定は無視されるみたいです。以下のようにsetで指定する方がよさそうです。

#!/bin/bash

set -xe

ls | grep 'ababababababa'

echo 'abcd'

今までどっちも同じやろ位にしか思っていなかったのですが、set派に改宗することにします。