dポイントプレゼントキャンペーン実施中!

プログラムを実行するシェルスクリプト内に以下のように絶対パスで環境変数の設定用のシェルスクリプトが絶対パスで書かれているのですが、この場合だと環境が変わるたびにシェルスクリプト内のパスを書き換えなければなりません。
/dir1/dir2/dir3/setenv.sh

相対パスにすれば書き換える必要はなくなるのですが、お作法上は相対パスで書くことは問題ない(良いと)されているのでしょうか?
../../dir/setenv.sh

A 回答 (4件)

作法という範囲では気にする必要はありません。

正しく動くなら相対バスでいいです。
ただし、カレントディレクトリが特定の階層で無いと正しく動かないスクリプトになってしまいますが、それでいいのでしょうか?

状況が書かれていないので、該当しないかもしれませんが、通常は、親スクリプトのディレクトリからの相対で指定するのがよいでしょう。親スクリプトと同じディレクトリにあるsetenv.shを起動するなら、
SCRIPT_DIR=${0%/*}
$SCRIPT_DIR/setenv.sh
です。( ${0%/*} で親スクリプトファイル名を削除してディレクトリ名を求めます)

この回答への補足

すみません。以下を実行してみたのですが、「文法があいまいです」というエラーがでてしまいました。
SCRIPT_DIR=${0%/*}
$SCRIPT_DIR/setenv.sh

${0%/*}これは正規表現か何かでしょうか?

OSはSunOS 5.9です。

補足日時:2006/12/01 18:03
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/12/21 19:18

>${0%/*}これは正規表現か何かでしょうか?


>OSはSunOS 5.9です。

Linuxのカテゴリでの質問だったので、bash前提で回答しました。
SunOSならSolarisカテゴリが適当です。

bashが使えないとすると、
SCRIPT_DIR=`expr "$0" : '\(.*\)/'`
でディレクトリが取り出せます。「最後に出てくる / の手前まで」を取り出すという意味です。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/12/21 19:18

そのスクリプトを起動するときに、いつもその相対ディレクトリが有効なディレクトリで起動するなら構わないです。



例えばそのスクリプトが環境変数に入っているとしたら、スクリプト名さえ打てばどのディレクトリからでも起動できてしまいますが、相対パスで指定した先に使用するファイルがなければエラーになります。
またcronで動かす際にも問題が起きるかもしれません。
そのような理由で、普通はフルパス(絶対パス)で記述するのが安全とされています。

要は動きさえすれば、あとはあなたのお好みでどうぞ、ということです。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/12/21 19:16

 お作法かどうかは知らないが、よく使われているのは環境変数を使う方法やね。


 たとえばApache Tomcatの$CATALINA_HOME、Oracle Databaseの$ORACLE_BASEと$ORACLE_HOME。

 相対パスもよく使われていると思いますわよ。たとえば、hogehoge.shとhogehoge_env.shなどがある場合、hogehoge.shの中で「. ./hogehoge.env.sh」などと書かれてある事も多いんじゃないかな。これはれっきとした相対パスだよね。

 個人的には、配布物そのものの形できちんと実行できるのであれば、相対パスにしてもそんな問題は無いと思う。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/12/21 19:15

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