「test」という名前の実行可能ファイルは$ PATHにありますが、実行されません


13

$ HOME / binにファイルがあります(尋ねる前に、はい、私のtestパスにあります)。ファイルへのフルパスで実行すると問題なく実行できることを確認しました。ただし、この方法で実行しないと、本当に奇妙な問題が発生します。testターミナルで実行すると、何もせずにすぐに戻ります。これは、いくつかの理由でファイルを見つけることの問題ではないことを知っています。

  1. エラーメッセージはありません。通常、ファイルが見つからない、または実行できない場合、その旨を示すメッセージが出力されます。

  2. 実行してwhich testも、正しいファイルパスが返されます。

  3. おそらく最も奇妙なのは、スクリプトが実行されstraceたときに正常に動作することです。私はstrace何が起こっているのかを理解できるかどうかを試してみましたが、で実行するとstrace、問題なく0で動作しました。


7
typeではなくを使用しwhichます。「which」を使用しない理由を
wjandrea

回答:


45

test使用するには残念な名前ですが、条件付きテストの標準ユーティリティです。(これは、実際と同じコマンドです[if [ ... ]、それだけで、見え構文の事のように、しかし、実際には通常のコマンドです。)

testBashなどにも組み込まれているため、実行してtestもパスからバイナリが検索されることはありません。

bash$ help test | head
test: test [expr]
    Evaluate conditional expression.

    Exits with a status of 0 (true) or 1 (false) depending on
    the evaluation of EXPR.  Expressions may be unary or binary.  
    [...]

test 引数なしでは、1(false)が返されます。

ユーティリティ自体は実装されてstrace testいないため、実行にはシェルの組み込みは含まれませんstrace。それはあなたが見つけたものを使うだけPATHです。あなたはおそらく標準を持っていることを注意testして/bin/testか、/usr/bin/testそれが最初になりそうだとすれば、PATHstraceことを実行して実行します。

私のBashではwhich、外部コマンドでもあるため、組み込みコマンドについてのアイデアもありません。一方、コマンドがシェルに組み込みされており、それを示すであろう。typetype testtest is a shell builtin

関連項目:「which」を使用しない理由 次に何を使用しますか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.