インポートするが実行しないシェルスクリプトを定義する方法

インポートするが実行しないシェルスクリプトを定義する方法

ユーザーが実行する必要があるシェルスクリプトを定義しています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-efksh、yash、zsh、Dashはサポートされていますが、bashBASH_SOURCEが必要です。 存在するzshただし、${BASH_SOURCE[0]}に置き換えることができます${(%):-%N}

おすすめ記事