2017-02-19 6 views
0

Ich versuche, ein Bash-Skript zum Erstellen von Listen von Dateien zu schreiben. Ich dachte, ich würde einfach 'finden' innerhalb einer Schleife nennen. Leider hat es in der Schleife einen "find: command not found" Fehler erzeugt und ich weiß nicht warum.Finden Sie "Befehl nicht gefunden", wenn in der Bash-Schleife

Um die Dinge kurz zu halten, repliziert diese beschnittene Version das Problem, ohne uns in irrelevantem Code zu stören.

Während der Fehlersuche habe ich den ersten "find" -Befehl ... hinzugefügt, der später in der Schleife funktioniert. Wenn ich es erneut auszählen lasse, wird der Fehler in der Schleife wieder gefunden.

Da ich den Loop-Ausgang in eine Datei umleiten werde, kann ich mit dem zusätzlichen Befehl 'find' leben oder sogar einfach auf null umleiten. Ich bin jedoch ein wissbegieriger Kerl und ich möchte wirklich herausfinden, was das Problem ist.

Danke für jede Eingabe.

+0

Verwenden Sie für Ihre eigenen Variablen Kleinbuchstaben, um zu vermeiden, dass Variablen mit Bedeutung für das Betriebssystem oder die Shell überschrieben werden - wie Sie es hier gerade getan haben. Siehe [die entsprechende POSIX-Spezifikation] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html), die angibt, dass Großbuchstaben für integrierte Variablen und Umgebungsvariablen mit Bedeutung für die Shell und verwendet werden Betriebssystem, und dass der Namespace von Variablen mit mindestens einem Kleinbuchstaben für die Anwendung reserviert ist. –

+0

Das heißt - wenn Sie über eine Liste von Dingen iterieren möchten, sollten Sie ein tatsächliches Array verwenden, IFS nicht setzen und dann eine Zeichenfolge aufteilen, als ob es ein Array wäre. 'Pfade = (openvpn vms); für den Pfad in "$ {paths [@]}"; echo "Verarbeitung $ path"; done' –

+0

Danke Charles. Ziemlich neu für Linux und ich habe einige andere Seiten gelesen, die die Verwendung von Caps für Variablen zur besseren Lesbarkeit vorschlugen, aber jetzt wird darauf hingewiesen, dass ich es vollkommen verstehe. Ich hatte auch versucht, Arrays, hatte aber einige Probleme, wenn Pfade Leerzeichen enthalten und anschließende Aufnahme/Ausschluss von Zitaten verursacht Verdoppelung, aber jetzt habe ich dieses Problem nicht gelöst, werde ich zurück gehen und einen anderen Blick, warum mein Array goosed ist. – JNoob

Antwort

6

Es ist auf der Suche nach find in $PATH ... die Ihr Skript zerstört hat.

+0

Sie sind nicht falsch ... was für ein Idiot. Es war die Tatsache, dass der erste "Fund" macht die zweite Arbeit, dass ich völlig übersehen, dass ich meine $ PATH Vielen Dank! – JNoob