Bash-Skript druckt "Befehl Nicht Gefunden" auf leere Zeilen
Jedes mal, wenn ich ein Skript ausführen, mit bash scriptname.sh
von der Befehlszeile aus in Debian, bekomme ich Command Not found
und dann das Ergebnis des Skripts.
Das Skript funktioniert, aber es ist immer ein Command Not Found
- Anweisung gedruckt, auf dem Bildschirm für jede leere Zeile. Jede leere Zeile entsteht ein "Befehl nicht gefunden".
Läuft bei mir das script aus der /var
Ordner.
Hier ist das Skript:
#!/bin/bash
echo Hello World
Ich es starten, indem Sie Folgendes eingeben:
bash testscript.sh
Warum sollte dieses auftreten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass Ihre erste Zeile ist:
Geben Sie Ihren Pfad zu bash, wenn es nicht
/bin/bash
Versuchen ausgeführt:
Dass wil konvertieren von Zeilenenden, usw. von Windows auf unix format. d.h. es Streifen \r (CR) von Zeilenenden, Sie zu ändern aus
\r\n (CR+LF)
zu\n (LF)
.Mehr details über die
dos2unix
- Befehl (Mann-Seite)Anderen Weg, zu sagen, wenn Sie Ihre Datei in der dos/Win-format:
Wird die Ausgabe wie folgt Aussehen:
Dieser Ausgabe wird die gesamte Datei text mit
<CR>
angezeigt für jede\r
Zeichen in der Datei.bash scriptname.sh
(aber es ist noch immer gute Praxis, natürlich).\n
als die end-of-line-Sequenz, und wenn die Zeile enthält\r\n
(aufgrund von windows-text-editor), dann bash will offenbar etwas zu tun mit der\r
"Wort".Können Sie
bash -x scriptname.sh
ihn zu verfolgen.Ich lief auch ein ähnliches Problem. Das Problem scheint zu sein, Berechtigungen. Wenn Sie eine
ls -l
Sie können in der Lage sein, zu erkennen, dass Ihre Datei möglicherweise NICHT das execute-bit eingeschaltet. Dies wird NICHT zulassen, dass das Skript ausgeführt werden soll. 🙂Als @artooro Hinzugefügt Kommentar:
chmod +x testscript.sh
Wenn das script seine Arbeit erledigt (relativ) gut, dann läuft es okay. Ihr problem ist vermutlich eine einzige Zeile in der Datei verweisen auf ein Programm, das entweder nicht auf dem Pfad, nicht installiert, falsch geschrieben, oder etwas ähnliches.
Ein Weg ist, um ein
set -x
oben in Ihrem Skript oder führen Sie es mitbash -x
statt nurbash
- dadurch wird die Ausgabe der Zeilen, bevor Sie Sie ausführt und Sie in der Regel brauchen nur zu schauen, auf die Ausgabe des Befehls unmittelbar vor dem Fehler um zu sehen, was das problem verursachtWenn, wie du sagst, es ist die leere Linien, die die Probleme verursacht, möchten Sie vielleicht zu überprüfen, was actaully in Sie. Ausführung:
und stellen Sie sicher, es gibt keine "unsichtbaren" komische Charaktere, wie die
CTRL-M
(carriage return) können Sie erhalten, indem Sie einen Windows-Typ-editor.verwenden
dos2unix
auf Ihrer script-Datei.Mag dies trivial und nicht mit den OP ' s Frage, aber ich bin oft verwechselt am Anfang, als ich lernen mußte, scripting
Diese produzieren 'Befehl nicht gefunden' - Antwort. Der richtige Weg ist, zu beseitigen, die Räume
Wenn Sie Notepad++ und bekommen Sie das .sh Fehlermeldung: "Befehl nicht gefunden"
oder das autoconf-Fehlermeldung "line 615:
../../autoconf/bin/autom4te: Keine solche Datei oder das Verzeichnis".
Auf Ihrem Notepad++, Gehe zu Bearbeiten -> EOL-Konvertierung dann schauen Sie Macinthos(CR).
Dies wird Bearbeiten Sie Ihre Dateien. Ich habe auch ermutigen, um zu überprüfen, alle Dateien mit diesem Befehl
da bald so ein Fehler auftreten wird.
Versuchen
chmod u+x testscript.sh
Ich weiß, dass es von hier:
http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/
zur Ausführung müssen Sie den vollständigen Pfad, die
zum Beispiel
Hatte das gleiche problem. Leider
so, ich habe diese zu konvertieren.
dann
apt-get install dos2unix
Auf Bash für Windows habe ich versucht, falsch zu laufen
ohne ./am Anfang und bekam den gleichen Fehler.
Für Leute mit Windows-hintergrund die richtige form aussieht, redundant:
Probleme mit dem ausführen von scripts können auch angeschlossen werden, um schlechte Formatierung von multi-line-Befehle, zum Beispiel wenn Sie ein Leerzeichen nach dem Zeilenumbruch "\". E. g. diese:
(bitte beachten Sie das zusätzliche Leerzeichen nach "\") wird zu Problemen führen, aber wenn Sie zu entfernen, dass Raum, es läuft völlig in Ordnung.
War ich auch, dass einige der
Cannot execute command
. Es sah alles korrekt, aber in der Tat war ich mit einem non-breakable space
direkt vor meinen Befehl, das war natürlich unmöglich zu erkennen mit bloßem Auge:Welche in Vim, sah, wie:
Nur nach dem ausführen des Bash-script checker
shellcheck
habe ich das problem gefunden.shellcheck
ist verfügbar on-line, obwohl Sie natürlich kopieren+fügen Sie Ihr Skript genau in der Reihenfolge für die, um zu helfen. shellcheck.netLief ich in diese heute, selbstvergessen kopieren der dollar-Eingabeaufforderung
$
(vor einem Befehls-string) in das Skript.Hinzufügen des aktuellen Verzeichnisses ( . ), um WEG, um in der Lage sein, um ein Skript auszuführen, indem Sie einfach Ihren Namen, die sich im aktuellen Verzeichnis:
.
AUF IHREM WEG.Können Sie aktualisieren möchten, Sie .bashrc und .bash_profile-Dateien mit Aliase zu erkennen, der Befehl, den Sie eingeben.
.bashrc und .bash_profile-Dateien sind versteckte Dateien vermutlich befindet sich auf Ihrem C: - Laufwerk, wo Sie speichern Sie Ihre Programm-Dateien.