シェルの中で相対パスでほかのシェルを呼びたいが、普通にシェルの中で相対パスで指定するとシェル自体を絶対パスで実行された場合、パスが解決できずに動かないのですが、皆さんどのように解決していますか?


cd /home/user
./xxxx.sh

で実行されても

/home/user/xxxx.sh

で実行されても大丈夫なようにしたい。

※絶対パス指定はNGでお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/15 20:25:47
  • 終了:--

回答(5件)

id:inosisibeyan No.1

inosisibeyan回答回数211ベストアンサー獲得回数02006/01/15 20:42:31

ポイント50pt

http://docs.hp.com/ja/B2355-97164/ch03s11.html

検索パスによるコマンド検索

パスが通れば動きます。

$ echo $PATH

/usr/bin/sh:/usr/bin:/usr/local/bin

ここに

/

を入れると大丈夫です。

ただ、セキュリティ上はお勧め出来ません。

id:aiaru

あー。盲点を突かれました。

確かにセキュリティー上問題はありますよね〜。

意外な答えにちょっとポイント多めにする予定です。

2006/01/15 20:49:10
id:divspan No.2

divspan回答回数8ベストアンサー獲得回数02006/01/15 22:13:31

ポイント5pt

呼び出され方を調べてそこへcdしてしまうのは反則でしょうか?


#!/bin/sh

FILEPWD=`echo $0 | sed -e ’s#¥(.*¥)/.*#¥1#’`

echo pwd:$FILEPWD


cd $FILEPWD

./test2.sh

../test3.sh

id:time_and_groove No.3

time_and_groove回答回数19ベストアンサー獲得回数02006/01/15 23:11:14

ポイント5pt

http://www.cj-c.com/faq/pass.htm

[CJ-Club]-[FAQ]-相対パス? 絶対パス?

現時点では実行環境がないので確認できませんが、シェル内にて、「cd」として、ホームディレクトリに移ってから、相対ディレクトリ指定をしてみるとうまく行ったような覚えがあります。(うまく行かなかったらごめんなさい。)


「仮想パス」というのでしょうか?

~/sh/yyyy.sh

とすれば、実行ユーザーのホームディレクトリ下のshディレクトリを実行してくれます。


禁止されていますが、絶対ディレクトリの一部をシェル変数に入れておいて使う場合が多いです。

set HOME_PATH=/home/user


$HOME_PATH/sh/yyyy.sh


Cシェルとして、回答しました。

id:monyot No.4

monyo回答回数146ベストアンサー獲得回数182006/01/15 23:27:16

ポイント45pt

http://www.monyo.com/

MONYO-COM: たかはしもとのぶの個人ページ

URLはダミーです。


sh系シェルスクリプトであれば、例えば


echo $0 | sed ”s/`basename $0`$//g”


でシェルスクリプトがあるディレクトリを取得できますので、ここからの相対パスを指定すれば、用件は満たせるかと思います。

id:t-wata No.5

t-wata回答回数82ベストアンサー獲得回数132006/01/16 11:12:57

ポイント25pt

シェルスクリプト中から別のシェルスクリプトを呼ぶ際に、../hoge.shのように実行せず、シェルスクリプト自身の存在するディレクトリを取得し、そこからの相対パスを使えば良いです。


シェルスクリプトの存在するディレクトリは、シェルスクリプト中で

BASEDIR=`dirname $0`

のように実行すれば取れます。あとは、

${BASEDIR}/../hoge.sh

のように実行すればOKです。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません