- ベストアンサー
シェルの実行ファイル位置の取得
sh実行時に絶対パスで指定するのですが、その実行したshのディレクトリは取得できないのでしょうか。 実行した後にそのパスを利用してシェル位置まで移動したいです。 /home/user/xxxxx/yyyyy/zzzzz/aaa.sh ↑をどこの場所で実行しても実行後には /home/user/xxxxx/yyyyy/zzzzz/の位置に移動をしていたいのですが、 シェル内で/home/user/xxxxx/yyyyy/zzzzz/を取得する事は可能でしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
シェルスクリプト中でスクリプト名は「$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
その他の回答 (2)
- shuyamakawa
- ベストアンサー率67% (111/164)
#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
お礼
スクリプトを連続していけば結構複雑な事ができそうですね。 参考にさせていただきます。ありがとうございました。
- ham_kamo
- ベストアンサー率55% (659/1197)
ちょっと疑問があるのですが、 > 実行した後にそのパスを利用してシェル位置まで移動したいです。 ということは、 /home/user/xxxxx/yyyyy/zzzzz/aaa.sh の中でcdでディレクトリ移動したいのでしょうか? スクリプトを実行してカレントディレクトリを移動するのは無理だと思うのですが。スクリプトの中でcdしても、スクリプトを抜けると元に戻るので。
お礼
すみません。ちょっと言葉がおかしかったですね。 スクリプト内で移動をしていればよくて、親プロセスは移動しないでもよかったんです。 助言ありがとうございました。
お礼
なるほど$0ですね。 助かりました。ありがとうございます。 教えていただいたことを踏まえてプログラムしていきたいと思います。