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
何らかの方法で邪魔になるとします。
- ここで二重スラッシュは何を意味し、ここに現れるのですか?
- 私の実行可能ファイルが
test
機能していないようです。なぜそんなことですか?
答え1
私はあなた/home/sawa/foo/bar/
が持っていると思います。つまり、パスにスラッシュがあるパスがあります。
which
各要素を繰り返し、ファイルが存在するかどうかを追加して$PATH
確認します。/argv[1]
これは二重スラッシュを引き起こします。 1つは$PATH
部品で、もう1つは/argv[1]
。
ㅏ二重スラッシュは大丈夫です。カーネルによってスラッシュに縮小されます。二重スラッシュはパスの先頭でのみ特別な意味を持つことができますが、必ずしもそうではありません。
test
動作しない場合test
。通常、これを行うにはフルパスを使用しますが、bashを使用してそれを使用して組み込みenable -n test
コマンドtest
を無効にすることもできます。
答え2
シェル組み込み機能が実行ファイルよりも実行優先順位を持つため、機能しない可能性が高いです。意図的にこのような名前衝突動作を生成しないでください。〜する環境全体に一貫性がありません。システムバイナリは、test
組み込みバージョンのないシェルでのみ使用できます。
代替機能が必要な場合は、スクリプト名を別のものとして指定する必要があります。