人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

cd /home/user
./xxxx.sh

で実行されても

/home/user/xxxx.sh

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

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

●質問者: あーる
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:CD HOME NG sh USER
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● inosisibeyan
●50ポイント

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

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

パスが通れば動きます。

$ echo $PATH

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

ここに

/

を入れると大丈夫です。

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

◎質問者からの返答

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

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

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


2 ● divspan
●5ポイント

http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html#lbAT

Manpage of BASH

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


#!/bin/sh

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

echo pwd:$FILEPWD


cd $FILEPWD

./test2.sh

../test3.sh


3 ● time_and_groove
●5ポイント

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シェルとして、回答しました。


4 ● monyo
●45ポイント

http://www.monyo.com/

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

URLはダミーです。


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


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


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


5 ● t-wata
●25ポイント

http://www.google.co.jp/search?q=%22dirname+%240%22&start=0&...

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


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

BASEDIR=`dirname $0`

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

${BASEDIR}/../hoge.sh

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ