2014-11-27 7 views
7

ich dieses Skript online gefunden und versucht, es zu benutzen:

#!/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 das Skript Online validiert haben, und das Skript ist in Ordnung. Ich habe auch versucht, es auf verschiedene Arten zu ändern, aber es funktioniert nicht für mich.

ich auch versuchte, läuft wie etwas haben:

#!/bin/sh 
# Target directory 
TARGET=$3 
echo "Copying to $TARGET" 
for i in $(ls) 
do 
    echo "text" 
done 

Und ich immer noch den gleichen Fehler:

./git-copy.sh: line 6: syntax error near unexpected token `$'do\r'' 
'/git-copy.sh: line 6: `do 

Warum ist das so?

Antwort

16

Ihr Skript wurde auf einem DOS- oder Windows-basierten System bearbeitet und enthält Carriage-Return-Zeichen, die Linux/Unix nicht mögen (das was \r ist). Sie könnten dos2unix verwenden, um die Wagenrücklauf-Zeilenenden in das richtige Format zu konvertieren; wenn Sie nicht über dos2unix könnten Sie awk wie

awk '{ sub("\r$", ""); print }' git-copy.sh > git-copy2.sh 
mv git-copy2.sh git-copy.sh 
+0

Genie. Vielen Dank! Ich vermutete das '\ r', aber ich konnte es nicht verschwinden lassen. Danke vielmals! – kfirba

2

verwenden Dies ist ein ziemlich gemeinsame Alptraum :)

ich ein Skript gebaut \r\n von Dos zu normalisieren und von (alten) Mac; es entfernt auch BOM 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: einen besseren Namen für sie wählen! chmod und installieren Sie es

13

Eine andere mögliche Lösung unter Verwendung von Unix-Texteditor vi:

geöffnete Datei in vi bearbeitet mit vi filename.sh Befehl;

eingeben vi :set ff=unix Befehl;

speichern Datei mit :wq

Es wird die Datei mit Unix-Zeilenenden speichern.

+1

Dies war sehr nützlich, keine Dienstprogramme erforderlich. Vielen Dank! – Urchin

+1

rettete mich. Vielen Dank! – Kwiki

0

Das ist für mich gearbeitet:

dos2unix my_script.sh 

Wenn Sie nicht über dos2unix:

Um dos2unix auf CentOS, Fedora oder RHEL zu installieren:

$ sudo yum install dos2unix 

Um dos2unix auf Ubuntu oder Debian zu installieren :

$ sudo apt-get install tofrodos 
$ sudo ln -s /usr/bin/fromdos /usr/bin/dos2unix 

HTH