別のパスでスクリプトを実行してスクリプトパスを知る方法は?

別のパスでスクリプトを実行してスクリプトパスを知る方法は?

ファイルのあるパスにあるファイルにアクセスするには、スクリプトを実行する必要があります。

例:/home/me/folder/script.shファイルにアクセスするスクリプトがあります/home/me/folder/myfile。ファイルはスクリプトと同じパスにあるため、フルパスではmyfileなく名前のみを使用しました。

しかし、次のように実行すると/tmp/

/tmp$ /home/me/folder/script.sh

それは私に以下を与えます:

myfile: No such file or directory

もしそうなら、スクリプトはファイルがスクリプト自体と同じパスにあるとどうすればいいですか?

答え1

すべてのケースはわかりませんが、通常(常にそうではない)シェルが検索するのではなく、パスでスクリプトを実行すると、スクリプトパスはに$PATHあります$0。その後、またはdirname "$0"を使用して${0%/*}パスを取得できます。

答え2

どうですか$(dirname "$0")/myfile

答え3

私は通常スクリプトの冒頭で次のことを行います。

SCRIPTDIR=$(dirname "$0")

または(相対パス名の代わりに)スクリプトディレクトリのフルパス名を取得するには、次の手順を実行します。

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

その後、${SCRIPTDIR}必要な場所に引用してください。

関連情報