Cygwin „find“ gibt nichts zurück

Cygwin „find“ gibt nichts zurück

Dieser Befehl gibt in Cygwin unter Windows Server 2008 r2 nichts zurück:

/usr/bin/find /

Ich bekomme eine kurze Pause, aber es wird kein Text zurückgegeben. Kein Fehler, keine Ergebnisse usw. Ich habe es mit verschiedenen Suchpfaden versucht, Argumente verwendet (wie -type f) und meinen Cygwin-Pfad einfach auf /usr/local/bin:/usr/bin festgelegt. Nichts funktioniert.

Ideen?

Danke

Antwort1

Das ist ein sehr seltsames Verhalten und ich habe so etwas bei der Verwendung von Cygwin noch nie erlebt. Ich habe nicht genug Reputationspunkte, um in Kommentaren nach Informationen zu fragen, also poste ich einfach die Debugging-Techniken, die ich verwenden würde. Hoffentlich sind sie für alle anderen von Nutzen, die ähnliche Probleme haben.

Als Erstes würde ich versuchen zu überprüfen, ob ich die richtige ausführbare Datei ausführe. Beim Ausführen find --versionsollte etwa Folgendes zurückgegeben werden:

find (GNU Findutils) 4.5.11

Verpackt durch Cygwin (4.5.11-1)

Wenn ich immer noch keine Ausgabe erhalten würde, würde ich den folgenden Cygwin- strace Befehl (installieren und) verwenden:

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

straceermöglicht es Ihnen, zu sehen, welche Aufrufe eine Cygwin-ausführbare Datei an die Cygwin-DLL sendet. Mit dem obigen Befehl wird die Ausgabe des Find-Befehls in gespeichert find.out.

Wenn Sie nicht mit der Windows-Systemprogrammierung vertraut sind, wird vieles davon keinen Sinn ergeben. Wenn Sie sich jedoch die Ausgabe ansehen, erhalten Sie dennoch eine Vorstellung davon, was der Befehl tut. Beispielsweise werden der Cygwin-PATH und andere Umgebungsvariablen erfasst, die an den Befehl übergeben werden. Normalerweise suche ich nach , open( um zu sehen, welche Dateien der Befehl (find) zu verwenden versucht. Erfolgreiche Aufrufe der Open-Funktion werden wie folgt angezeigt:

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

Erfolglose Aufrufe von open geben den Wert -1 zurück. Beachten Sie, dass nicht alle Dateien, die find zu öffnen versucht, tatsächlich erforderlich sind, damit der Befehl korrekt funktioniert. Dies ist ein Beispiel für einen solchen erfolglosen Versuch (die Informationen in locale.alias würden gelesen, wenn sie vorhanden wären, aber sie sind für find nicht erforderlich, um seine Aufgabe zu erfüllen):

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

Hinweis: Ich erstelle (und entferne dann) das leere testdirVerzeichnis, damit in der Strace-Ausgabedatei nicht zu viele Informationen erfasst werden.

verwandte Informationen