Cygwinの「find」は何も返さない

Cygwinの「find」は何も返さない

このコマンドは、Windows Server 2008 r2 で実行されている Cygwin では何も返しません。

/usr/bin/検索/

少し一時停止しますが、テキストは返されません。エラーや結果などはありません。引数 (-type f など) を使用してさまざまな検索パスを試し、cygwin パスを /usr/local/bin:/usr/bin に設定しました。何も機能しません。

アイデアは?

ありがとう

答え1

これは非常に奇妙な動作で、Cygwin を使用している間はこのようなことは一度もありませんでした。コメントを使用して情報を求めるには評判ポイントが足りないので、私が使用するデバッグ手法を投稿します。同様の問題を抱えている他の人にとって役立つことを願っています。

まず、正しい実行可能ファイルを実行しているかどうかを確認します。実行すると、find --version次のような結果が返されます。

find (GNU findutils) 4.5.11

Cygwin (4.5.11-1) によってパッケージ化されました

それでも出力が得られない場合は、Cygwin のstrace コマンドを (インストールして) ​​使用します。

mkdir testdir
strace -o find.out find testdir
rmdir testdir

straceCygwin 実行ファイルが Cygwin DLL に対してどのような呼び出しを行うかを確認できます。上記のコマンドでは、find コマンドの出力が に保存されます find.out

Windows システム プログラミングに精通していない限り、その多くは意味をなさないでしょう。ただし、出力を調べると、コマンドが何をしているかがわかります。たとえば、コマンドに渡される Cygwin PATH やその他の環境変数がキャプチャされます。私は通常、open( コマンド (find) が使用しようとしているファイルを確認するために検索します。open 関数の呼び出しが成功すると、次のように表示されます。

open: open(/home/anthony/t, 0x30C000)
open: open(., 0x400000)

open の呼び出しが失敗すると、値 -1 が返されます。find が開こうとするすべてのファイルが、コマンドを正しく動作させるために実際に必要というわけではないことに注意してください。これは、そのような失敗した試行の 1 つの例です (locale.alias 存在する場合は の情報が読み取られますが、find が機能するためには必要ありません)。

open: -1 = open(/usr/local/share/locale/locale.alias, 0x8000), errno 2

testdir注: strace 出力ファイルに大量の情報がキャプチャされないように、空のディレクトリを作成 (および削除) します。

関連情報