一部のLinuxコマンドには明示的なパスが必要ですが、一部はそうではありません。

一部のLinuxコマンドには明示的なパスが必要ですが、一部はそうではありません。

なぜいくつかのbashコマンドは明示的なパスを必要とし、いくつかはそうではないのか理解できません。

明示的なパスを必要とするコマンドの完全なリストはありますか?

実際のケース:

chmod +x 2copyQ.tmp.sh ; 
./2copyQ.tmp.sh ;

これは有効か次のとおりです。No such file or directory

はいが機能しません:

chmod +x 2copyQ.tmp.sh ; 
2copyQ.tmp.sh ;
2copyQ.tmp.sh: command not found

ベストアンサー1

明示的なパスを必要とするコマンドの完全なリストはありますか?

短い答え:そのようなリストはありません。

長い答え:

ほとんどの対話型シェルでは、コマンドは$PATH変数を使用して取得されます。PATH実行可能ファイルを見つけるためのコロンで区切られたディレクトリのリスト。

サンプルは PATH次のとおりです。

 /home/archemar/bin:/usr/local/bin:/usr/sbin:/usr/bin

(実際にはPATHはるかに長いです)

コマンドを出すときfoo

  1. シェルは、存在しないディレクトリを自動的に無視し、リストされたディレクトリfooで指定された実行可能ファイルを左から右に検索します。PATH
  2. 実行可能ファイルが見つかると、fooシェルはそれを実行します。
  3. 見つからないとfoo: command not foundエラーが発生します。

game1/foo相対ファイル名(、、./foo)または絶対ファイル名()を使用すると、/opt/tomcat/bin/start.shシェルはファイルを見つけて実行します(見つからない場合は文句を言います)。

シェルが現在のディレクトリで実行可能ファイルを検索できるようにするには、.(local dir)を追加しますPATH

.:/home/archemar/bin:/usr/local/bin:/usr/sbin:/usr/bin

セキュリティ上の理由から追加することは悪い習慣と見なされ.ます。PATH

おすすめ記事