ユーザーが実行する必要があるシェルスクリプトを定義していますsource
。
ファイル拡張子を介してユーザーにこの状況を警告する従来の方法または賢明な方法はありますか?
ファイルをインポートするのではなく実行すると、メッセージをエコーして終了し、ユーザーがこの明白なエラーを回避するためにファイル自体に書き込むことができるシェルコードはありますか?
ベストアンサー1
bashを実行していると仮定し、インポートするが実行したくないスクリプトの冒頭に次のコードを配置します。
if [ "${BASH_SOURCE[0]}" -ef "$0" ]
then
echo "Hey, you should source this script, not execute it!"
exit 1
fi
bashの下には、${BASH_SOURCE[0]}
シェルが読み込んでいる現在のファイルの名前が含まれています(インポート中でも実行中でも)。
一方、$0
現在実行中のファイルの名前です。
-ef
両方のファイルが同じファイルかどうかをテストします。その場合は、ユーザーに警告してログアウトします。
POSIXも同様-ef
ですBASH_SOURCE
。-ef
ksh、yash、zsh、Dashはサポートされていますが、bashBASH_SOURCE
が必要です。 存在するzsh
ただし、${BASH_SOURCE[0]}
に置き換えることができます${(%):-%N}
。