"test"という実行可能ファイルは$ PATHにありますが、実行できません。

"test"という実行可能ファイルは$ PATHにありますが、実行できません。

$ HOME / binにファイルがあり(尋ねる前はそうです。私のパスにあります)、ファイルのフルパスでtest実行すると、ファイルが正しく実行されることがわかりました。しかし、このように実行しないと、非常に奇妙な問題にぶつかります。test端末でこれを実行すると、何も実行されず、すぐに返されます。ファイルの検索に問題がないことがわかり、その理由は次のとおりです。

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

  2. 引き続き実行すると、which test正しいファイルパスが返されます。

  3. おそらく最も奇妙なことは、スクリプトが実行されるとうまく機能することですstracestrace何が起こっているのかを調べることができるかどうかを確認するために を使ってみましたが、 を使用して実行したときにstrace問題がゼロとして期待どおりに機能しました。

答え1

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実行されます。PATHtest/bin/test/usr/bin/testPATHstrace

私のBashではwhich外部コマンドでもあるので、組み込みコマンドも理解できません。一方、typeコマンドシェルに組み込まれてtype test表示されますtest is a shell builtin

また見なさい:「which」を使わないのはなぜですか?それでは何を使うべきですか?

関連情報