错误:完成< <(find。-name“* .jar”)

时间:2014-05-20 10:50:44

标签: java bash maven cygwin

我有一个bash代码,我从我的Windows计算机上运行cygwin。我的队友在他们的计算机上完美地运行以下代码,但在我的错误中出现了:

$ bash addmvn.sh
addmvn.sh: line 6: syntax error near unexpected token `done'
'ddmvn.sh: line 6: `done < <(find . -name "*.jar")

以下是我们用于将maven安装到项目中的代码

while read line
do
    echo $line;
    jar=`basename $line`
    mvn install:install-file -Dfile=$line -DgroupId=com.strategyard.thirdparty -DartifactId=$jar -Dversion=1.0 -Dpackaging=jar
done < <(find . -name "*.jar")

2 个答案:

答案 0 :(得分:0)

您的脚本以DOS / Windows格式存储,在每行末尾带有回车符后跟换行符(有时写成“\ r \ n”); unix在行的末尾仅使用换行符(“\ n”),因此bash错误地将部分命令的回车符。当它看到

while read line\r
do\r

它不会将“do \ r \ n”识别为关键字,只是常规命令,因此它继续向前寻找“do”关键字。当它看到“完成”时,它会混淆并给出你看到的错误。

顺便说一句,我可以告诉他的方法是问题来自错误

'ddmvn.sh: line 6: `done < <(find . -name "*.jar")

请注意,关闭引号位于行的开头,而不是结尾。这告诉我实际的错误是:

addmvn.sh: line 6: `done < <(find . -name "*.jar")\r'

...并且回车符将其发送回行的开头,因此关闭引号会覆盖脚本名称中的“a”。

解决方案:将脚本转换为unix格式;我相信你会有dos2unix命令可用,但你可能需要四处寻找替代方案。在紧要关头,您可以使用

perl -pi -e 's/\r\n?/\n/g' /path/to/script

(见http://www.commandlinefu.com/commands/view/5088/convert-files-from-dos-line-endings-to-unix-line-endings)。然后切换到以unix格式而不是DOS格式保存的文本编辑器。

答案 1 :(得分:-1)

试试这个:

while read line
do
        echo $line;
        jar=`basename $line`
        mvn install:install-file -Dfile=$line -DgroupId=com.strategyard.thirdparty -DartifactId=$jar -Dversion=1.0 -Dpackaging=jar
done <<< $(find . -name "*.jar")
相关问题