Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
860 views
in Technique[技术] by (71.8m points)

bash file returns unexpected token `$'do ''

I found this script online and tried to use it:

#!/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";

I've validated the script online, and the script is okay. I've also tried to change it in various ways, but it doesn't work for me.

I've also tried running something like:

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

And I still get the same error:

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

Why is that?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Your script has been edited on a DOS or Windows based system and contains carriage-return characters that Linux/Unix does not like (that what is). You could use dos2unix to convert the carriage return line endings to the correct format; if you don't have dos2unix you might use awk like

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...