電子書籍の厳選無料作品が豊富!

sh実行時に絶対パスで指定するのですが、その実行したshのディレクトリは取得できないのでしょうか。
実行した後にそのパスを利用してシェル位置まで移動したいです。

/home/user/xxxxx/yyyyy/zzzzz/aaa.sh

↑をどこの場所で実行しても実行後には

/home/user/xxxxx/yyyyy/zzzzz/の位置に移動をしていたいのですが、

シェル内で/home/user/xxxxx/yyyyy/zzzzz/を取得する事は可能でしょうか。

A 回答 (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
    • good
    • 0
この回答へのお礼

なるほど$0ですね。
助かりました。ありがとうございます。

教えていただいたことを踏まえてプログラムしていきたいと思います。

お礼日時:2007/01/16 20:01

#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
    • good
    • 0
この回答へのお礼

スクリプトを連続していけば結構複雑な事ができそうですね。

参考にさせていただきます。ありがとうございました。

お礼日時:2007/01/16 20:04

ちょっと疑問があるのですが、



> 実行した後にそのパスを利用してシェル位置まで移動したいです。
ということは、
/home/user/xxxxx/yyyyy/zzzzz/aaa.sh
の中でcdでディレクトリ移動したいのでしょうか?

スクリプトを実行してカレントディレクトリを移動するのは無理だと思うのですが。スクリプトの中でcdしても、スクリプトを抜けると元に戻るので。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/16 20:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!