Ich habe dieses Skript online gefunden und versucht, es zu verwenden:
#!/bin/sh
# Target directory
TARGET=$3
echo "Copying to $TARGET"
for i in $(git diff --name-only $1 $2)
do
# First create the target directory, if it doesn't exist.
mkdir -p "$TARGET/$(dirname $i)"
# Then copy over the file.
cp "$i" "$TARGET/$i"
done
echo "Done";
Ich habe das Skript online validiert und das Skript ist in Ordnung. Ich habe auch versucht, es auf verschiedene Arten zu ändern, aber es funktioniert bei mir nicht.
Ich habe auch versucht, etwas wie:
#!/bin/sh
# Target directory
TARGET=$3
echo "Copying to $TARGET"
for i in $(ls)
do
echo "text"
done
Und ich bekomme immer noch den gleichen Fehler:
./git-copy.sh: line 6: syntax error near unexpected token `$'do\r''
'/git-copy.sh: line 6: `do
Warum das?
Ihr Skript wurde auf einem DOS- oder Windows-basierten System bearbeitet und enthält Wagenrücklaufzeichen, die Linux/Unix nicht gefallen (das, was \r
ist). Sie können dos2unix
verwenden, um die Zeilenenden des Wagenrücklaufs in das richtige Format zu konvertieren. Wenn Sie keinen dos2unix
haben, können Sie awk
wie verwenden
awk '{ sub("\r$", ""); print }' git-copy.sh > git-copy2.sh
mv git-copy2.sh git-copy.sh
Eine weitere mögliche Lösung mit dem Unix-Texteditor vi:
öffne die Datei in vi edit mit dem Befehl vi filename.sh
;
geben Sie den Befehl vi :set ff=unix
ein.
datei speichern mit :wq
Die Datei wird mit Unix-Zeilenenden gespeichert.
Das hat bei mir funktioniert:
dos2unix my_script.sh
Wenn Sie dos2unix nicht haben:
So installieren Sie dos2unix unter CentOS, Fedora oder RHEL:
$ Sudo yum install dos2unix
So installieren Sie dos2unix unter Ubuntu oder Debian:
$ Sudo apt-get install tofrodos
$ Sudo ln -s /usr/bin/fromdos /usr/bin/dos2unix
HTH
Dies ist ein ziemlich häufiger Albtraum :)
Ich habe ein Skript erstellt, um \r\n
von Dos und von einem (alten) Mac zu normalisieren. Es entfernt auch die Stückliste, falls vorhanden:
#!/usr/bin/Perl -pi
s/\012\r|\r\012|\012|\r/\012/g; ## normalize line endings
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//; ## remove common initial BOM
Verbrauch: script textualfile*
Ok, ok: Wähle einen besseren Namen dafür! chmod und installiere es
Ich hatte einen Fall, in dem ein Feld mit einem solchen Bash-Skript (in der Windows-Version von Intellij Idea) in DB geschrieben (INSERT) werden musste, und dann musste ich das Skript auf dem Unix-Server wieder aus DB auslesen. Unter Unix habe ich den Fehler $'do\r''
dieses Themas aus dem oben erläuterten Grund erhalten.
Die Lösung war: Kopieren/Einfügen eines Skripts unter Windows in den Editor, Ändern der Unix-Zeilenenden im Editor von Windows (CR LF) in Unix (LF), Speichern in einer Datei. Öffnen Sie die Datei, kopieren Sie sie und fügen Sie sie in die Datenbankkonsole von Idea ein. Dann hat es unter Unix einwandfrei funktioniert, für den Fall, dass es nicht Origin von Unix war.
(Idea hat auch Optionen, um Zeilenenden in seinem Editor auszuwählen.)
Ändern Sie einfach Ihre Zeilenfolge in Ihrem Texteditor von CRLF zu LF. Es hat bei mir funktioniert :)