参照:BASH FAQエントリ#28:「スクリプトの場所を確認するにはどうすればよいですか?同じ場所からいくつかの設定ファイルを読みたいのです。」
どのようなソリューションでも、100%は機能しません。
一般的なケースでは、この問題には解決策がないことを認識することが重要です。あなたが聞いたことがあるかもしれないアプローチ、および以下で詳述されるアプローチはすべて欠陥があり、特定のケースでのみ機能します。何よりもまず、スクリプトの場所に依存しないようにして、問題を完全に回避してください。
非常に再利用可能なツールを作成する必要がある場合は、スクリプトへのパラメーターとして正しいパスを使用するのが最も信頼できる方法です。
スクリプトが特定のシェルからのみ実行され、少しの柔軟性が必要なだけであると想定すると、このパラノイアのいくつかを緩和できるでしょう。それでもあなたの選択肢を見るのは良いことです。人々が使用する一般的なパターンには、特に問題があります。
特に、FAQでは、非常に一般的に使用される$0
変数を回避することを推奨しています。
それ自体が信頼できない$0
ので、読むものは決して防弾にはなりません$0
。
代わりに、$BASH_SOURCE
代わりに使用できます。このようなもの:
source "${BASH_SOURCE%/*}/act.conf.sh"
このソリューションにはいくつかの注意点もあります。FAQページをチェックして、さまざまなソリューション間のトレードオフを確認してください。適切に拡張できないと便利なエラー状態になるので、うまくいく場合cd
と組み合わせて使用$BASH_SOURCE
することをお勧めします。
readlink
。検索するキーワードを特定できなかったため、ここに質問を投稿しました...