私が試した簡単なスクリプトは次のとおりです。
#!/bin/bash DIR="$(cd "$(dirname $0)" && pwd)" echo $DIR
実行すると、$ ./my_script.sh
パスが正しく取得されます。
ただし、これを行うと$ source my_script.sh
パスが表示されます。/bin
ソースからスクリプトパスを取得する方法は?
ソースコードと実行コードの違いは何ですか?
答え1
スクリプトのインポートと「実行」の違いは、スクリプトをインポート(source
または使用.
)すると、現在のシェル環境でスクリプトが実行され、「実行」が新しいシェルプロセスを開始することです。ソーススクリプトが現在のシェル環境を変更したいと思います。別のシェルプロセスで実行されるスクリプトは、次のことができます。いいえ親シェルの環境を変更します。 「環境」とは、シェルと環境変数の値、現在の作業ディレクトリなどを意味します。
スクリプトはソースコードを取得したり、独自のシェル環境で実行するために書かれていることがよくありますが、両方を実行することはほとんどありません。ソースをインポートするスクリプトは「ドットスクリプト」とも呼ばれます(.
そのスクリプトをインポートする標準コマンドであるため、「エイリアス」であるsource
ため)。bash
.
シェルから取得したドットスクリプトは、bash
配列の最初の要素を確認して位置を見つけることができますBASH_SOURCE
。
printf 'My location: %s\n' "$( dirname "${BASH_SOURCE[0]}" )"
ディレクトリパスは、呼び出し時source
または.
スクリプトの現在の作業ディレクトリに基づいています。