プロが教えるわが家の防犯対策術!

ちょっと質問なのですが、コマンドをフルパスで入力するのとそうでないのとでは違いは大きいでしょうか。たとえば、
/bin/grepとか。

スクリプトの中にたくさんコマンドを詰め込んでサーバーに負荷を
与えてチェックした所、省略したコマンドだと通常は実行できるはずが、
負荷のせいなのか、コマンドが見つからないというエラーになりました。

対してフルパスで指定してから負荷テストを行うとコマンドを
実行してくれました。

できればコマンドが多い分、スクリプトの中をすっきりさせる為に
コマンドを略して記述したいのですが、フルパスで指定したほうが
よいものでしょうか。。

A 回答 (3件)

高負荷でPATHが参照できなかったのか、理由はよくわかりませんが、


・高負荷で通常の状態とは異なる状態
・フルパスで指定すればきちんと実行できる
という状況でスクリプトを確実に動かしたいのであれば、スクリプト内でフルパス指定するのが確実でしょう

No.2のかたが書かれているようにスクリプト内でPATHを設定してきちんと動くかどうかも試してみる価値があると思います

なお、カレントディレクトリにPATHを通すことは危険なので、一般には行いません
(自分しか使っていない、他の人間が入ってこないようなマシンなら別かもしれませんが)
http://penguin.tantin.jp/security/path%E3%81%AE% …
http://www.atmarkit.co.jp/flinux/rensai/linuxtip …
に書かれているようにセキュリティ上問題があるからです
    • good
    • 0
この回答へのお礼

参考URLの中の「同じプログラムがあって。。。」
がとてもピンときましたっ

ありがとうございます。
誰かに渡すだけでなく、自分で忘れてて同じ名前のプログラムを
作成していて、意図したスクリプトが実行されず。。。
なんてこともありえそうですものね。

URLとても助かりましたっ
フルパスで行きます!!
ありがとうございましたっ

お礼日時:2009/09/05 23:13

/bin/grep は絶対パス(フルパス)であってますよ


通常コマンドを打つ場合は、環境変数のPATHから
ディレクトリを補完されて実行されてます。

個人的には、シェルスクリプトをテストする時は
ログインしてるのでPATHが通ってるから動くように見えるけど
cronに登録して実行した時PATHが通って無くて実行できない
とかPATHを通す順番が違って別バージョンのコマンドが動いてた
などといった違いでバグのもとになったりするので
シェルスクリプト内で使われるコマンドは
できるだけ絶対パスで書いた方がいいかなと思いますけど

スクリプトファイルの中でPATHを通してやれば
ディレクトリの指定無しで実行することができるはずですよ。
    • good
    • 0
この回答へのお礼

そうですよね。
誰かに渡したいスクリプトになるので、その誰かが、
自分のスクリプトの中で実行するコマンドと同じ名前の
プログラムを作ってて、そちらを実行されてしまって
予想外な展開になることが考えられますね

すごくすっきりしてきました。
スクリプトの中は逆にスッキリしなくなりますけど、
自分の気持ちが晴れてきました!!

>スクリプトファイルの中でPATHを通してやれば
おそらく何度も実行するコマンドがあれば、一度
始めに変数として代入?というのでしょうか。
GREP=`/bin/grep`としておいてから後で
$GREPを何度も使うみたいな。

すごくタメになります!!
楽しくなってきました!!
あざす!!

お礼日時:2009/09/05 23:11

カレントディレクトリならば、フルパスで指定する必要は無いと思います。



/bin/grep もフルパスでは有りません。相対パスです。
参考:
http://www.linux-beginner.com/linux_kihon15.html

参考:
Linuxのディレクトリ構造
http://kansai.homelinux.com/~Linux/linux-directr …
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございます

カレントディレクトリという意味は今いるディレクトリ
(実行スクリプトが設置されてるディレクトリ)という認識でいます。
まちがってたらすいません。

自分が気にしているのは以下の2点なのです。
1.スクリプトの中のコマンド達を正確に実行させたい。
2.スクリプトの中を出来るだけすっきりさせたい

上記に対して
フルパス記述でない場合、そのコマンドを探しにいく
フルパス記述の時は直接コマンドを実行できる。

という違いがあるのでは?と推測しています。その為、
すっきりさせたいけど、全部のコマンドをフルパスで
記述しないと正確に実行できないかもしれない。。。
というモヤモヤがあるのです。。

何かご教授いただけますでしょうか。

お礼日時:2009/09/05 01:52

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