[解決済み] スクリプトの実行に関連したファイルの参照
質問
私が書いているbashスクリプトで、私は
source
を使って、設定ファイルに定義された変数をインクルードしています。実行されるスクリプトは
act.sh
であるのに対し、実行されるスクリプトは
source
d は
act.conf.sh
であるため
act.sh
を持っています。
source act.conf.sh
しかし、これは
act.sh
を含むディレクトリで実行したときだけです。
act.conf.sh
は、作業ディレクトリの下に置かれたファイルを参照しているからです。を呼び出すことなく、実行中のスクリプトからの相対的なファイルを参照するようにする解決策はありますか?
cd
? ありがとうございます。
どのように解決するのですか?
参照してください。 BASH FAQ entry #28: "スクリプトの場所を決めるにはどうしたらいいですか?同じ場所からいくつかの設定ファイルを読み込みたいのですが、"
どのような解決策も100%うまくいくわけではありません。
一般的なケースにおいて、この問題には解決策がないことを認識することが重要です。あなたが聞いたことがあるようなアプローチ、および以下で詳しく説明するアプローチには欠点があり、特定の場合にのみ機能します。何よりもまず、スクリプトの場所に依存しないことで、この問題を完全に回避するようにしましょう!
を書く必要がある場合 非常に 再利用可能なツールを書く必要があるのなら スクリプトのパラメータとして正しいパスを取ることが、最も信頼できる方法です。 .
スクリプトが特定のシェルからのみ実行され、少しの柔軟性が必要であると仮定すると、おそらくこの偏執狂をいくらか緩和することができます。それでも、オプションを検討するのは良いことです。人々が使用する、特に問題のある一般的なパターンがあります。
特に、FAQ では、非常によく使われる
$0
変数を避けることを推奨しています。
を読み取るものはありません。
$0
は決して防弾にはならないでしょう。$0
自体が信頼できないからです。
代替案として
$BASH_SOURCE
を使うこともできます。このようなものです。
source "${BASH_SOURCE%/*}/act.conf.sh"
この解決策にもいくつかの注意点があります。FAQのページで、異なるソリューション間のトレードオフを確認してみてください。彼らは
cd
と組み合わせて
$BASH_SOURCE
を組み合わせると、正しく展開できなかったときに便利なエラーコンディションが得られるので、うまくいく場合があります。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] シェルスクリプトでYYYY-MM-DD形式の日付にする
-
[解決済み] シェルスクリプトで部分文字列を別の文字列に置き換える
-
[解決済み] シェルスクリプトからウェブブラウザを起動する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 他のスクリプトをどのように取り込むのがベストか?
-
[解決済み] シェルプログラミングで「export」は何をするのですか?重複
-
[解決済み] find を使ってサブディレクトリを除外する
-
[解決済み] Git のコマンドライン・インターフェイスの言語を変更するにはどうしたらよいですか?
-
[解決済み] Bashで引用符で囲まれた文字列の中で環境変数を使用する方法
-
[解決済み] シェルスクリプトで文字列が空でもスペースでもないことをチェックする
-
[解決済み] Ansibleで新しいユーザーとパスワードを作成する
-
[解決済み] bashでalt + numericを押すと(arg [numeric])と出ますが、これは何でしょう?
-
[解決済み] bashで端末の最終行を削除して置換するには?
-
[解決済み] MSYSでフォルダを閲覧する