Ich bin neu in der Verwendung von Cygwin, daher entschuldige ich mich, wenn dies eine sehr neue Frage ist.
Ich habe ein Bash-Skript, in dem ich ein Verzeichnis "cd" und dann etwas in diesem Verzeichnis tue. Der Befehl cd schlägt jedoch mit "Keine solche Datei oder kein solches Verzeichnis / c / code / blah / blah" fehl.
Wenn ich die CD-Zeile direkt in die Shell-Eingabeaufforderung kopiere, funktioniert es einwandfrei. Es schlägt nur im Skript fehl.
[edit] Wie gewünscht habe ich die aktuellen Zeilen aus dem Skript hinzugefügt:
#!/bin/bash
cd /c/Code/Project
Vielen Dank für jede Hilfe,
Dan.
Antworten:
Welche Art von Zeilenenden hat Ihr Skript? Damit das Cygwin-Bash-Skript ordnungsgemäß funktioniert (ohne dass spezielle Optionen festgelegt werden müssen), muss es über Unix-Zeilenenden (LF) und nicht über DOS-Zeilenenden (CR-LF) verfügen. Wenn Sie das Skript mit DOS-Zeilenenden gespeichert haben, sieht Bash Ihr Argument
cd
als/c/Code/Project^M
, wo^M
sich ein CR befindet, und findet kein Verzeichnis mit diesem Namen.Um zu sehen, welche Art von Zeilenenden es gibt, können Sie ausführen
file scriptname
, wobei scriptname der Name Ihres Skripts ist. Führen Sie Folgendes aus, um das Skript so zu konvertieren, dass es Unix-Zeilenenden aufweistd2u scriptname
.Verwenden Sie den Editor nicht zum Bearbeiten von Cygwin-Bash-Skripten. Es werden immer Dateien mit DOS-Zeilenenden gespeichert.
quelle
:help ff
und:help ffs
.Sofern Sie dies nicht überschreiben, wird ein Skript in einer eigenen Kopie der Shell (normalerweise Bash) ausgeführt. Wenn das Skript beendet wird, wird auch diese Bash-Instanz beendet. Also werden Ihre Skript-CDs in ein neues Verzeichnis verschoben und dann beendet. Sie kehren zum ursprünglichen Bash zurück - der noch nie eine CD erstellt hat.
Es gibt zwei Möglichkeiten, dies zu umgehen. Sie können einen Alias anstelle eines Skripts verwenden, zB in Ihrem .profile haben
Eine andere Möglichkeit besteht darin, Bash mit der "Punkt" -Syntax anzuweisen, keine Subshell zu erzeugen
quelle
Möglicherweise finden Sie Ihre Dateien in / cygdrive / c ...
quelle
Versuchen:
cd /cygdrive/c/code/blah/blah
quelle
'cd c:/code/blah/blah
"nicht für'cd /c/code/blah/blah
". Das 'c:
' Formular funktioniert auch über ein Skript. Hier fehlt noch etwas anderes, die Frage bedarf einer genaueren Ausarbeitung.Ich habe keinen Ruf für Kommentare oder Abstimmungen, aber die Antwort von CarlF hat mir geholfen.
"Also werden Ihre Skript-CDs in ein neues Verzeichnis verschoben und dann beendet. Sie kehren zum ursprünglichen Bash zurück - der noch nie eine CD erstellt hat."
Gleiches Skript, aber in meinem Fall keine Fehlermeldung.
Das hat bei mir funktioniert:
. myscript.sh
quelle