
ちょっと質問なのですが、コマンドをフルパスで入力するのとそうでないのとでは違いは大きいでしょうか。たとえば、
/bin/grepとか。
スクリプトの中にたくさんコマンドを詰め込んでサーバーに負荷を
与えてチェックした所、省略したコマンドだと通常は実行できるはずが、
負荷のせいなのか、コマンドが見つからないというエラーになりました。
対してフルパスで指定してから負荷テストを行うとコマンドを
実行してくれました。
できればコマンドが多い分、スクリプトの中をすっきりさせる為に
コマンドを略して記述したいのですが、フルパスで指定したほうが
よいものでしょうか。。
No.3ベストアンサー
- 回答日時:
高負荷でPATHが参照できなかったのか、理由はよくわかりませんが、
・高負荷で通常の状態とは異なる状態
・フルパスで指定すればきちんと実行できる
という状況でスクリプトを確実に動かしたいのであれば、スクリプト内でフルパス指定するのが確実でしょう
No.2のかたが書かれているようにスクリプト内でPATHを設定してきちんと動くかどうかも試してみる価値があると思います
なお、カレントディレクトリにPATHを通すことは危険なので、一般には行いません
(自分しか使っていない、他の人間が入ってこないようなマシンなら別かもしれませんが)
http://penguin.tantin.jp/security/path%E3%81%AE% …
http://www.atmarkit.co.jp/flinux/rensai/linuxtip …
に書かれているようにセキュリティ上問題があるからです
参考URLの中の「同じプログラムがあって。。。」
がとてもピンときましたっ
ありがとうございます。
誰かに渡すだけでなく、自分で忘れてて同じ名前のプログラムを
作成していて、意図したスクリプトが実行されず。。。
なんてこともありえそうですものね。
URLとても助かりましたっ
フルパスで行きます!!
ありがとうございましたっ
No.2
- 回答日時:
/bin/grep は絶対パス(フルパス)であってますよ
通常コマンドを打つ場合は、環境変数のPATHから
ディレクトリを補完されて実行されてます。
個人的には、シェルスクリプトをテストする時は
ログインしてるのでPATHが通ってるから動くように見えるけど
cronに登録して実行した時PATHが通って無くて実行できない
とかPATHを通す順番が違って別バージョンのコマンドが動いてた
などといった違いでバグのもとになったりするので
シェルスクリプト内で使われるコマンドは
できるだけ絶対パスで書いた方がいいかなと思いますけど
スクリプトファイルの中でPATHを通してやれば
ディレクトリの指定無しで実行することができるはずですよ。
そうですよね。
誰かに渡したいスクリプトになるので、その誰かが、
自分のスクリプトの中で実行するコマンドと同じ名前の
プログラムを作ってて、そちらを実行されてしまって
予想外な展開になることが考えられますね
すごくすっきりしてきました。
スクリプトの中は逆にスッキリしなくなりますけど、
自分の気持ちが晴れてきました!!
>スクリプトファイルの中でPATHを通してやれば
おそらく何度も実行するコマンドがあれば、一度
始めに変数として代入?というのでしょうか。
GREP=`/bin/grep`としておいてから後で
$GREPを何度も使うみたいな。
すごくタメになります!!
楽しくなってきました!!
あざす!!
No.1
- 回答日時:
カレントディレクトリならば、フルパスで指定する必要は無いと思います。
/bin/grep もフルパスでは有りません。相対パスです。
参考:
http://www.linux-beginner.com/linux_kihon15.html
参考:
Linuxのディレクトリ構造
http://kansai.homelinux.com/~Linux/linux-directr …
すばやい回答ありがとうございます
カレントディレクトリという意味は今いるディレクトリ
(実行スクリプトが設置されてるディレクトリ)という認識でいます。
まちがってたらすいません。
自分が気にしているのは以下の2点なのです。
1.スクリプトの中のコマンド達を正確に実行させたい。
2.スクリプトの中を出来るだけすっきりさせたい
上記に対して
フルパス記述でない場合、そのコマンドを探しにいく
フルパス記述の時は直接コマンドを実行できる。
という違いがあるのでは?と推測しています。その為、
すっきりさせたいけど、全部のコマンドをフルパスで
記述しないと正確に実行できないかもしれない。。。
というモヤモヤがあるのです。。
何かご教授いただけますでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UNIX コマンドにおける # や円...
-
Linuxコマンドは何の言語で書か...
-
Debian Linux で、「fetch」に...
-
「環境変数名の編集」ウィンド...
-
VBAを使って電源を切るには?
-
Linux:sedコマンドで置換がし...
-
Linuxでコマンドが終了しない
-
Macでldコマンド、ldconfigコマ...
-
Linuxで/usr/bin/wcって何ですか?
-
windowsコマンドでUnixのcutコ...
-
MacBook Air mid 2011版をクリ...
-
IISのサービス名を教えてください
-
Solarisでiノード数を確認する...
-
AIXでの文字コード、改行コード...
-
HP-UXでのメモリ使用率について
-
至急です、Ubuntuに詳しい方助...
-
compressコマンドってなくなっ...
-
Ctrl+Zで戻りすぎた場合、逆に...
-
historyコマンドのソースコードを
-
[バッチファイル]レジストリ値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNIX コマンドにおける # や円...
-
コマンドプロンプトにおけるコ...
-
compressコマンドってなくなっ...
-
[バッチファイル]レジストリ値...
-
「環境変数名の編集」ウィンド...
-
SCコマンドでアクセス拒否
-
Linuxコマンドは何の言語で書か...
-
vbaで「最前面に」とする方法は?
-
至急です、Ubuntuに詳しい方助...
-
AIXでの文字コード、改行コード...
-
画面の文字をさかのぼってみる...
-
クイックアクセスツールバーに...
-
solarisのdateコマンドで
-
Ctrl+Zで戻りすぎた場合、逆に...
-
ワイルドカードを使ってでフォ...
-
dig/host/nslookup コマンド...
-
shutdownコマンドをキャンセル...
-
アクセスのボタンから指定のワ...
-
echo $!の意味を教えてください
-
Linuxでコマンドが終了しない
おすすめ情報