我在网上发现了这个脚本并尝试使用它:
#!/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";
Run Code Online (Sandbox Code Playgroud)
我已经在线验证了脚本,脚本没问题.我也试图以各种方式改变它,但它对我不起作用.
我也尝试过运行类似的东西:
#!/bin/sh
# Target directory
TARGET=$3
echo "Copying to $TARGET"
for i in $(ls)
do
echo "text"
done
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误:
./git-copy.sh: line 6: syntax error near unexpected token `$'do\r''
'/git-copy.sh: line 6: `do
Run Code Online (Sandbox Code Playgroud)
这是为什么?
Ell*_*sch 27
您的脚本已在基于DOS或Windows的系统上编辑,并包含Linux/Unix不喜欢的回车符(即什么\r
).您可以使用dos2unix
将回车行结尾转换为正确的格式; 如果你没有,dos2unix
你可能会awk
喜欢
awk '{ sub("\r$", ""); print }' git-copy.sh > git-copy2.sh
mv git-copy2.sh git-copy.sh
Run Code Online (Sandbox Code Playgroud)
Bfc*_*fcm 24
另一种使用unix文本编辑器vi的可能解决方案:
使用vi filename.sh
命令在vi中打开文件;
输入vi :set ff=unix
命令;
保存文件 :wq
它将使用unix行结尾保存文件.
这为我工作:
dos2unix my_script.sh
Run Code Online (Sandbox Code Playgroud)
如果您没有dos2unix:
对于CentOS,Fedora或RHEL:
$ sudo yum install dos2unix
Run Code Online (Sandbox Code Playgroud)
对于Ubuntu或Debian:
$ sudo apt-get install tofrodos
$ sudo ln -s /usr/bin/fromdos /usr/bin/dos2unix
Run Code Online (Sandbox Code Playgroud)
这通常是在可执行文件在操作系统(windows)中创建并在另一个操作系统(Linux)中使用时引起的。另外,罕见的文本编辑器也可能是问题所在。