"which"から返された "//"はどういう意味ですか?

"which"から返された "//"はどういう意味ですか?

testフルパスの下に実行可能なスクリプトがあります/home/sawa/foo/bar/test。このディレクトリは、を含むデフォルトディレクトリ/home/sawa/foo/bar内にあり、このディレクトリよりも優先されます。$PATH/usr/bin

`which test`

コマンドが正しく認識されたことを確認するには、次のように返します。

/home/sawa/foo/bar//test

//同じ名前の組み込みコマンドがあることがわかり、test私のコマンドを削除すると、次のコマンドがによって/usr/bin/test返されるので、which何らかの方法で邪魔になるとします。

  1. ここで二重スラッシュは何を意味し、ここに現れるのですか?
  2. 私の実行可能ファイルがtest機能していないようです。なぜそんなことですか?

答え1

私はあなた/home/sawa/foo/bar/が持っていると思います。つまり、パスにスラッシュがあるパスがあります。

which各要素を繰り返し、ファイルが存在するかどうかを追加して$PATH確認します。/argv[1]これは二重スラッシュを引き起こします。 1つは$PATH部品で、もう1つは/argv[1]

二重スラッシュは大丈夫です。カーネルによってスラッシュに縮小されます。二重スラッシュはパスの先頭でのみ特別な意味を持つことができますが、必ずしもそうではありません。

test動作しない場合test。通常、これを行うにはフルパスを使用しますが、bashを使用してそれを使用して組み込みenable -n testコマンドtestを無効にすることもできます。

答え2

シェル組み込み機能が実行ファイルよりも実行優先順位を持つため、機能しない可能性が高いです。意図的にこのような名前衝突動作を生成しないでください。〜する環境全体に一貫性がありません。システムバイナリは、test組み込みバージョンのないシェルでのみ使用できます。

代替機能が必要な場合は、スクリプト名を別のものとして指定する必要があります。

関連情報