Ich habe Cygwin auf meinem Laptop (DOS) verwendet. Ich habe eine Sammlung von Skripten meiner Kollegen und meiner eigenen. Ich bin keine IT-Person und kenne mich mit Unix nicht aus. Ich folge der Syntax meiner Kollegen und kann ein paar einfache Dinge verwalten.
Die Skripte funktionierten gut auf meinem alten Laptop. Ich habe gerade den Laptop gewechselt und Cygwin installiert. Wenn ich meine Skripte ausführe, funktionieren sie nicht. Hier ist ein Beispiel für die Fehlermeldung, die ich erhalte:
line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi
Hier sind die obersten 5 Zeilen meines Skripts
:
iter=1
if [ -f iter.txt ]
then rm ./iter.txt
fi
Kann mir bitte jemand erklären, wie ich dieses Problem umgehen kann?
quelle
vim
dies auf zwei Arten möglich ist, von denen eine Wörter verwendet. Oder, noch besser, um darauf hinzuweisen, wo diese untergeordnete Aufgabe hier immer wieder ausführlicher beantwortet wurde als jede Antwort auf dieser Seite, einschließlich unix.stackexchange.com/questions/88811, nur für den Anfang.vi -b
,\r
sind vim Erweiterungen sowieso. nicht POSIX, nicht in nvi, elvis, Solaris vi ...Dies liegt daran, dass das Skript von einem Editor gespeichert wurde, der DOS-Zeilenenden verwendet (z. B. Notepad ++). Sie müssen diese aus Ihren Skripten entfernen.
Verwenden Sie dazu entweder
dos2unix
die Skriptdatei oder(Dadurch werden alle Wagenrückläufe von einer beliebigen Stelle im Skript entfernt.)
Wie für den Code im Skript:
Dies sollte möglicherweise so aussehen
Dadurch wird die Datei
1.txt
aus dem aktuellen Verzeichnis entfernt, sofern vorhanden. Der:
Befehl macht (fast) nichts und kann entfernt werden. Deriter
Wert der Variablen sollte als$iter
und in Anführungszeichen gesetzt werden. Und dann bin ich möglicherweise expliziter als nötig, indem./
ich sage, dass die Datei im aktuellen Verzeichnis gefunden werden muss.Wenn Sie planen , dies in einer Schleife zu drehen (hier, um alle Dateien zu löschen
1.txt
,2.txt
...,10.txt
):Oder wenn wir uns hinterhältig / faul fühlen,
in Muscheln, die die Ausdehnung der Zahnspange verstehen.
quelle
Windows (CR LF)
Unix (LF)
rm -f [1-9].txt 10.txt
. Aber das ist nicht ganz logisch äquivalent, als ob es keine Dateien 1-9 gibt, aber es gibt eine Datei, die buchstäblich aufgerufen wird,[1-9].txt
dann wird sie gelöscht. : DIhre Skripte haben die falschen Zeilenenden. Windows verwendet CR + LF (\ r \ n), Unix verwendet LF (\ n) und Classic MacOS verwendet CR (\ r). Sie müssen die Zeilenenden aller betroffenen Dateien ändern, entweder mit einem Texteditor oder einem eigenständigen Tool wie
dos2unix
.FTP- und Versionskontrollsysteme wie SVN sind in der Regel in der Lage, die Zeilenenden entsprechend zu konvertieren. Daher sollten Sie diese Optionen für die zukünftige Übertragung von Dateien prüfen.
Wenn diese Dateien nicht übertragen, sondern nur auf einem einzelnen Computer verwendet werden, sollten Sie die Einstellungen für Zeilenenden in Ihrem bevorzugten Texteditor finden. Die meisten, die als "für Programmierer" beworben werden, haben eine solche Option.
quelle
Lassen Sie mich als ergänzende Antwort ein paar Anmerkungen / Tipps hinzufügen ...
Erstens können Sie bei normalen Textdateien mit dem
file
Befehl leicht feststellen, ob Unix- oder DOS-Zeilen enden . Beispielsweise:Beachten Sie meine Verwendung von
dos2unix
. Ich empfehle Ihnen dringend, es zu installieren. Je nachdem, wie Sie Cygwin verwenden, müssen Sie diese Konvertierung möglicherweise häufig genug durchführen, damit die Bequemlichkeit erwünscht ist. Noch wichtiger ist, dass bei den hier beschriebenen manuellen Änderungen keine Fehlerwahrscheinlichkeit besteht.Starten Sie zur Installation die ausführbare Cygwin-Hauptdatei. Das ist der mit dem Namen setup-x86_64.exe oder so ähnlich. Stellen Sie sicher, dass Sie einen Bildschirm wie diesen sehen:
Da Sie die primäre Installation bereits durchgeführt haben, sollten Sie bis zum Auswahlbildschirm auf Weiter klicken können. Wählen Sie Voll in der Dropdown-Liste und geben Sie "dos2" in das Suchfeld ein und wählen Sie das Werkzeug wie hier gezeigt:
Klicken Sie dann erneut auf Weiter und lassen Sie die Installation abschließen. Das ist es. Habe Spaß. Cygwin ist mit Ausnahme dieser gelegentlichen Unannehmlichkeiten ein großartiges Paket.
quelle
Wenn nicht dos2unix, gibt es auch 'flip'
$ flip -u yourfilename.txt
dreht es auf Unix-Zeilenenden.
quelle
Ich verwende Notepad ++ , um meine Bash-Skripte (.sh) zu bearbeiten, indem ich über WinSCP eine Verbindung zum Server herstelle.
(So richten Sie den WinSCP-Editor für Notepad ++ ein: https://winscp.net/eng/docs/ui_editor_preferences )
Dies ist sehr praktisch, um Dateien von Servern zum Bearbeiten / Speichern anstelle des " Vim " -Editors zu öffnen .
Wenn Sie die Datei in Notepad ++ öffnen, doppelklicken Sie auf die 7. Spalte in der Statusleiste unten und wählen Sie " Unix (LF) ".
Außerdem müssen Sie die 8. durch Codieren -> In UTF-8 in der oberen Leiste codieren ändern.
quelle
Sie müssen die tatsächliche Zeilencodierung der Datei nicht ändern, damit Cygwins Bash problemlos mit Mac- und Windows-Zeilenendcodierungen funktioniert. Es gibt eine Option, die Sie nur aktivieren müssen.
Aktualisieren Sie einfach Ihre,
~/.bash_profile
damit es enthältSiehe https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html
quelle