• ベストアンサー

シェルの実行ファイル位置の取得

sh実行時に絶対パスで指定するのですが、その実行したshのディレクトリは取得できないのでしょうか。 実行した後にそのパスを利用してシェル位置まで移動したいです。 /home/user/xxxxx/yyyyy/zzzzz/aaa.sh ↑をどこの場所で実行しても実行後には /home/user/xxxxx/yyyyy/zzzzz/の位置に移動をしていたいのですが、 シェル内で/home/user/xxxxx/yyyyy/zzzzz/を取得する事は可能でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

シェルスクリプト中でスクリプト名は「$0」で取得出来ます。 フルパスで指定しているのなら 「dirname $0」で(ファイル名を取り除いた)ディレクトリ部分が 取り出せます。 >cd /tmp >cat hoge.sh #! /bin/sh echo dirname=`dirname $0` >/tmp/hoge.sh dirname=/tmp >./hoge.sh dirname=. >sh /tmp/hoge.sh dirname=/tmp

langria
質問者

お礼

なるほど$0ですね。 助かりました。ありがとうございます。 教えていただいたことを踏まえてプログラムしていきたいと思います。

その他の回答 (2)

回答No.3

#1です。補足です。 > ↑をどこの場所で実行しても実行後には > /home/user/xxxxx/yyyyy/zzzzz/の位置に移動をしていたいのですが、 スクリプト中でchdir(cd)すれば、 スクリプト内部ではディレクトリ移動出来ますが、 スクリプト終了後に、そのディレクトリ変更は親プロセス(シェル)には 反映されません。 >cat /tmp/hoge.sh #! /bin/sh echo dirname=`dirname $0` cd `dirname $0` echo pwd=`pwd` >cd /home >pwd /usr/home >/tmp/hoge.sh dirname=/tmp pwd=/tmp >pwd /usr/home スクリプト内部でさらにシェルを起動すれば、 その子シェルの中では、ディレクトリ変更は有効になっていますが、 ご要望にはそわないかもしれないですね。 >cat /tmp/hoge2.sh #! /bin/sh echo dirname=`dirname $0` cd `dirname $0` csh

langria
質問者

お礼

スクリプトを連続していけば結構複雑な事ができそうですね。 参考にさせていただきます。ありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

ちょっと疑問があるのですが、 > 実行した後にそのパスを利用してシェル位置まで移動したいです。 ということは、 /home/user/xxxxx/yyyyy/zzzzz/aaa.sh の中でcdでディレクトリ移動したいのでしょうか? スクリプトを実行してカレントディレクトリを移動するのは無理だと思うのですが。スクリプトの中でcdしても、スクリプトを抜けると元に戻るので。

langria
質問者

お礼

すみません。ちょっと言葉がおかしかったですね。 スクリプト内で移動をしていればよくて、親プロセスは移動しないでもよかったんです。 助言ありがとうございました。

関連するQ&A