別のパスからスクリプトを実行し、スクリプトのパスを知る方法は?


8

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

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

しかし、私がそれをから実行すると/tmp/、次のようになります:

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

それは私に与えます:

myfile: No such file or directory

では、スクリプトで、ファイルがスクリプト自体と同じパスにあることをどのように言えますか?


ここでmyfileの使用方法を教えてください。
Faheem Mitha、2011年

@Faheem Mitha:私のscript.shが呼び出すもう1つのスクリプトです。
トム・ブリト

フルパスを使用したくない、またはこれらの両方をPATHに移動したくない理由がありますか?
Faheem Mitha、2011年

1
@Faheem Mitha:スクリプトを含むこのフォルダを、myfileのパスを書き換える必要なく、別の場所、おそらくは別のコンピュータに移動できるようにしたい。
トム・ブリト

回答:



9

すべての状況で知ることはできませんが、多くの場合(常にではありません)、シェルを検索させる代わりにパスでスクリプトを実行すると、スクリプトへのパス$PATHはになります$0。次に、dirname "$0"または${0%/*}を使用してパスを取得できます。


4

私は通常、スクリプトの冒頭で次のようなことをします。

SCRIPTDIR=$(dirname "$0")

または、(相対パス名ではなく)スクリプトのディレクトリへの完全パス名を取得するには、次のようにします。

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

次に${SCRIPTDIR}、必要に応じて参照します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.