シェルスクリプトのソースを作成すると、shebang行は無視されます。無効なシバンを入れることで、スクリプトが誤って実行されたことをユーザーに警告できます。
#!/bin/bash source-this-script
# ...
エラーメッセージは次のようになります。
/bin/bash: source-this-script: No such file or directory
(任意の)引数名はすでに強力なヒントを提供しますが、エラーメッセージは100%明確ではありません。次の場所にあるユーティリティスクリプトsource-this-scriptでこれを修正できますPATH。
#!/bin/sh
echo >&2 "This script must be sourced, not executed${1:+: }${1:-!}"
exit 1
エラーメッセージは次のようになります。
This script must be sourced, not executed: path/to/script.sh
他のアプローチとの比較
他の回答と比較して、このアプローチは各スクリプトへの最小限の変更のみを必要とします(また、シェバン行を使用すると、エディターでのファイルタイプの検出に役立ち、シェルスクリプトの方言が指定されるため、メリットもあります)。欠点は、やや不明瞭なエラーメッセージ、または別のシェルスクリプトの(一度限りの)追加です。
bash path/to/script.shただし、による明示的な呼び出しは妨げられません(@muruに感謝します!)。
xコマンドを含む1行のシェルスクリプトを書いている場合. your-script-to-be-sourced、それはOKですが、彼がbash your-script-to-be-sourcedそれを実行したい場合は禁止されるべきですか?この制限のポイントは何ですか?