• ベストアンサー

コマンドをフルパスで入力する理由

ちょっと質問なのですが、コマンドをフルパスで入力するのとそうでないのとでは違いは大きいでしょうか。たとえば、 /bin/grepとか。 スクリプトの中にたくさんコマンドを詰め込んでサーバーに負荷を 与えてチェックした所、省略したコマンドだと通常は実行できるはずが、 負荷のせいなのか、コマンドが見つからないというエラーになりました。 対してフルパスで指定してから負荷テストを行うとコマンドを 実行してくれました。 できればコマンドが多い分、スクリプトの中をすっきりさせる為に コマンドを略して記述したいのですが、フルパスで指定したほうが よいものでしょうか。。

質問者が選んだベストアンサー

  • ベストアンサー
  • 774danger
  • ベストアンサー率53% (1010/1877)
回答No.3

高負荷でPATHが参照できなかったのか、理由はよくわかりませんが、 ・高負荷で通常の状態とは異なる状態 ・フルパスで指定すればきちんと実行できる という状況でスクリプトを確実に動かしたいのであれば、スクリプト内でフルパス指定するのが確実でしょう No.2のかたが書かれているようにスクリプト内でPATHを設定してきちんと動くかどうかも試してみる価値があると思います なお、カレントディレクトリにPATHを通すことは危険なので、一般には行いません (自分しか使っていない、他の人間が入ってこないようなマシンなら別かもしれませんが) http://penguin.tantin.jp/security/path%E3%81%AE%E8%A8%AD%E5%AE%9A.html http://www.atmarkit.co.jp/flinux/rensai/linuxtips/040execcaprog.html に書かれているようにセキュリティ上問題があるからです

r-linux
質問者

お礼

参考URLの中の「同じプログラムがあって。。。」 がとてもピンときましたっ ありがとうございます。 誰かに渡すだけでなく、自分で忘れてて同じ名前のプログラムを 作成していて、意図したスクリプトが実行されず。。。 なんてこともありえそうですものね。 URLとても助かりましたっ フルパスで行きます!! ありがとうございましたっ

その他の回答 (2)

  • kichiwave
  • ベストアンサー率41% (10/24)
回答No.2

/bin/grep は絶対パス(フルパス)であってますよ 通常コマンドを打つ場合は、環境変数のPATHから ディレクトリを補完されて実行されてます。 個人的には、シェルスクリプトをテストする時は ログインしてるのでPATHが通ってるから動くように見えるけど cronに登録して実行した時PATHが通って無くて実行できない とかPATHを通す順番が違って別バージョンのコマンドが動いてた などといった違いでバグのもとになったりするので シェルスクリプト内で使われるコマンドは できるだけ絶対パスで書いた方がいいかなと思いますけど スクリプトファイルの中でPATHを通してやれば ディレクトリの指定無しで実行することができるはずですよ。

r-linux
質問者

お礼

そうですよね。 誰かに渡したいスクリプトになるので、その誰かが、 自分のスクリプトの中で実行するコマンドと同じ名前の プログラムを作ってて、そちらを実行されてしまって 予想外な展開になることが考えられますね すごくすっきりしてきました。 スクリプトの中は逆にスッキリしなくなりますけど、 自分の気持ちが晴れてきました!! >スクリプトファイルの中でPATHを通してやれば おそらく何度も実行するコマンドがあれば、一度 始めに変数として代入?というのでしょうか。 GREP=`/bin/grep`としておいてから後で $GREPを何度も使うみたいな。 すごくタメになります!! 楽しくなってきました!! あざす!!

回答No.1

カレントディレクトリならば、フルパスで指定する必要は無いと思います。 /bin/grep もフルパスでは有りません。相対パスです。 参考: http://www.linux-beginner.com/linux_kihon15.html 参考: Linuxのディレクトリ構造 http://kansai.homelinux.com/~Linux/linux-directry-stracure.htm

r-linux
質問者

お礼

すばやい回答ありがとうございます カレントディレクトリという意味は今いるディレクトリ (実行スクリプトが設置されてるディレクトリ)という認識でいます。 まちがってたらすいません。 自分が気にしているのは以下の2点なのです。 1.スクリプトの中のコマンド達を正確に実行させたい。 2.スクリプトの中を出来るだけすっきりさせたい 上記に対して フルパス記述でない場合、そのコマンドを探しにいく フルパス記述の時は直接コマンドを実行できる。 という違いがあるのでは?と推測しています。その為、 すっきりさせたいけど、全部のコマンドをフルパスで 記述しないと正確に実行できないかもしれない。。。 というモヤモヤがあるのです。。 何かご教授いただけますでしょうか。

関連するQ&A