bashにリストされているプログラムのカタログ


1

bash(または他のシェル)で「firefox」または別のコマンドを入力すると、bashはどのように実際の場所(/ usr / bin / firefox)を指すのですか?また、bashオートコンプリートの「カタログ」はどこにありますか?

回答:


1

$PATHコマンド名を検索するためのすべてのパス(コロン区切り)を保持する変数があります。これらのフォルダーは、最初のフォルダーから最後のフォルダーまでチェックされ、見つかったときにコマンドが実行されます(したがって、異なる$PATHディレクトリにその名前のファイルが複数ある場合、最初のフォルダーが実行されます)。

表示するには$PATH

echo $PATH

どこにfirefoxあるかを確認するには:

which firefox

同じ名前のコマンドが別のフォルダー(両方とも$PATH)にある場合はwhich -a firefox、それらを使用してすべてを一覧表示できます。実行時に、シェルは最初のものを選択します。
mpy

だから誰かが$ pathにプログラムを追加するのはどうですか?これを間違って理解していますか?また、実際のファイルはありますか?
-agz

コマンドを発行すると、$ PATHフォルダーが検索されます。ファイルが見つかると、実行されます。新しいコマンドを「作成」するには、その名前の実行可能ファイルを任意のPATHディレクトリに追加します。そのファイルを使用して新しいディレクトリを作成し、そのディレクトリを$ PATHに追加することもできます。
グロノスタジ


1

必需品は他の回答ですでに与えられています。技術的には、シェルはコマンドの場所をハッシュテーブルに保存します。ではbash、あなたのコマンドによって、このテーブルを表示することができますhash

$ hash
hits    command
   2    /usr/bin/ldd
   1    /usr/bin/man
   1    /usr/bin/less

このハッシュテーブルを変更することもできます。詳細については、bashmanページを引用しています。

hash [-lr] [-p filename] [-dt] [name]

各名前について、コマンドの完全なファイル名は、$ PATHのディレクトリを検索して決定され、記憶されます。-pオプションが指定されている場合、パス検索は実行されず、コマンドの完全なファイル名としてfilenameが使用されます。-rオプションを使用すると、シェルは記憶されているすべての場所を忘れます。-dオプションにより、シェルは各名前の記憶された場所を忘れます。-tオプションを指定すると、各名前が対応するフルパス名が出力されます。複数の名前引数が-tで指定された場合、名前はハッシュされたフルパス名の前に出力されます。-lオプションを使用すると、入力として再利用できる形式で出力が表示されます。引数が指定されていない場合、または-lのみが指定されている場合、記憶されたコマンドに関する情報が出力されます。名前が見つからないか、無効なオプションが指定されない限り、戻りステータスはtrueです。ここで、このセッションで既に実行したコマンドを確認できます。

他のシェルは異なる動作をする可能性がありますzsh(これはから適応されたと思いますcsh)シェルは、起動時またはを呼び出すことですべてのコマンドを収集しますrehash。次に、使用可能なすべてのコマンドの完全なリストを取得し、hashたとえばのすべてのバリアントを検索できますdiff

zsh$ hash | grep diff
bzdiff=/usr/bin/bzdiff
cdiff=/usr/bin/cdiff
colordiff=/usr/bin/colordiff
diff=/usr/bin/diff
diff3=/usr/bin/diff3
ptardiff=/usr/bin/ptardiff
sdiff=/usr/bin/sdiff
tkdiff=/usr/bin/tkdiff
vimdiff=/usr/bin/vimdiff
xzdiff=/usr/bin/xzdiff
zdiff=/usr/bin/zdiff

繰り返しますが、man zshbuiltins詳細については相談してください。


0
  1. bashは$PATH環境変数を使用して、単語ごとにプログラムを探します。パスはで区切られてい:ます。あなたの$PATHようなものである可能性が高い:/usr/bin:/usr/games:/usr/local/bin:/usr/local/games:ので、それを見つけ/usr/local/binます。を変更して$PATH再試行してください。
  2. complete組み込みを介してタブ補完の動作を変更できます。の「プログラム可能な完了」を参照してくださいman bash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.