ちょっと質問なのですが、コマンドをフルパスで入力するのとそうでないのとでは違いは大きいでしょうか。たとえば、
/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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- Windows 10 WIN10(MAC-bootcamp)で 起動時のパスWが どうにもならない 2 2023/06/30 11:40
- オープンソース gmailでのimap設定 1 2022/09/15 13:25
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- その他(コンピューター・テクノロジー) (コマンドプロンプト)コマンドプロンプトのactiveについて 2 2022/07/16 17:21
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Excel(エクセル) Powershell エクセル検索 完全一致の方法 1 2022/06/05 20:19
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iqoo neo 9と言うスマホがある...
-
AIXでの文字コード、改行コード...
-
DOSコマンドについて
-
アクセスのボタンから指定のワ...
-
echo $!の意味を教えてください
-
UNIX コマンドにおける # や円...
-
Powershell エクセル検索 完全...
-
cd-romドライブを閉じる コマ...
-
クイックアクセスツールバーに...
-
linuxのファイル名の長さを255B...
-
telinit 読み方を教えてください
-
[バッチファイル]レジストリ値...
-
コマンドの戻り値リファレンス
-
mac で Googleマップ 切り取り
-
「bash:ipconfig:command not f...
-
シェルスクリプトでパスワード...
-
Macでldコマンド、ldconfigコマ...
-
コマンド履歴が~/.bash_history...
-
「環境変数名の編集」ウィンド...
-
vbaで「最前面に」とする方法は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNIX コマンドにおける # や円...
-
SCコマンドでアクセス拒否
-
[バッチファイル]レジストリ値...
-
Ctrl+Zで戻りすぎた場合、逆に...
-
Excel下部のメニューが消えた
-
「環境変数名の編集」ウィンド...
-
【Gmailコマンド】1年以上前の...
-
vbaで「最前面に」とする方法は?
-
Linuxコマンドは何の言語で書か...
-
ワイルドカードを使ってでフォ...
-
アクセスのボタンから指定のワ...
-
AIXでの文字コード、改行コード...
-
shutdownコマンドをキャンセル...
-
compressコマンドってなくなっ...
-
Linux:sedコマンドで置換がし...
-
閉じている全ての+ボタンを一...
-
コマンドプロンプトにおけるコ...
-
Powershell エクセル検索 完全...
-
VBAを使って電源を切るには?
-
バーチャルBOX Windows 95 セッ...
おすすめ情報