実行可能プログラムとして作成したシェルスクリプトが、何かの間違いで .
や source
で読み込まれた時に想定外の動作をしてしまわないよう、source
されること自体を禁止(何もしない)したいときは以下の様な1行を冒頭に書いておけば良い。
dont_source.sh
#!/bin/bash
return 1 2>/dev/null || true
echo "I am just a command"
-
. dont_source.sh
された場合return 1
によっていきなり処理は終了し、以降のコードは一切実行されない。 - プログラムとして実行された場合
return 1
は必ず失敗し、そのまま何ごとも無かったかのように以降の行に処理が続きプログラムは継続する。また、set -e
されているとエラーが発生した時点で終了されてしまうので、それを防ぐために|| true
でステータスコードを0
にリカバリしている。