$ HOME / binにファイルがあり(尋ねる前はそうです。私のパスにあります)、ファイルのフルパスでtest
実行すると、ファイルが正しく実行されることがわかりました。しかし、このように実行しないと、非常に奇妙な問題にぶつかります。test
端末でこれを実行すると、何も実行されず、すぐに返されます。ファイルの検索に問題がないことがわかり、その理由は次のとおりです。
エラーメッセージはありません。通常、ファイルが見つからないか実行できない場合は、それを説明するメッセージが表示されます。
引き続き実行すると、
which test
正しいファイルパスが返されます。おそらく最も奇妙なことは、スクリプトが実行されるとうまく機能することです
strace
。strace
何が起こっているのかを調べることができるかどうかを確認するために を使ってみましたが、 を使用して実行したときにstrace
問題がゼロとして期待どおりに機能しました。
答え1
test
残念な名前です。標準ユーティリティ条件付きテスト。 (実際に[
はのコマンドと同じですif [ ... ]
。そうだ構文に似ていますが、実際には一般的なコマンドです。 )
test
Bashも組み込まれているので、ランタイムはパス内の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
PATH
strace
私のBashではwhich
外部コマンドでもあるので、組み込みコマンドも理解できません。一方、type
コマンドシェルに組み込まれてtype test
表示されますtest is a shell builtin
。