2011-10-19 120 views
1

我正在执行里面的bash脚本。当执行这样的命令Jenkins:插入bash脚本中的特殊字符

current_loc=/tmp/$BUILDTYPE 
rm -rf $current_loc/* 
[ -d $current_loc/ ] || mkdir -p $current_loc 

通过

+ current_loc=$'/tmp/stage\r' 
+ rm -rf '/tmp/stage 
/* 
' 
+ '[' -d $'/tmp/stage\r/' ']' 
+ mkdir -p $'/tmp/stage\r\r' 

dollarquoting\r创造浩劫被替换。我该如何解决?

+0

我想你在'current_loc =/tmp/$ BUILDTYPE'和'... mkdir -p ...'行中有'\ r \ n'行分隔符 –

+2

像这样运行'dos2unix'工具:'' dos2unix myscript'并尝试 –

回答

0

您必须替换 '\ r' 像

BULDTYPE=$(echo $BULDTYPE | tr -d '\r');

0

有几种方法来运行詹金斯一个BASH脚本命令符号。第一种方法是创建一个bash脚本,让Jenkins将其作为构建过程的一部分执行。但是,您也可以直接在Jenkins中输入BASH脚本。你在做什么?

我怀疑你在Windows上使用记事本编写了你的​​shell脚本,然后在Unix上或者在Cygwin安装中执行它,该安装被设置为使用Unix行尾。您看到的\r在您的shell脚本中。

您可以使用程序编辑器重新编辑脚本,然后将行尾设置为Unix行尾。在VIM中,您可以通过以下方式执行此操作:

:set ff=unix 

处于命令模式。

如果您在Windows上使用Notepad++(免费下载和开放源代码),请选择Edit->EOL Conversion->Unix菜单项。 (或者您可以使用Vim

您可以运行大多数Unix和Linux安装所具有的dos2unix实用程序,但我会在程序编辑器中查看脚本。

请勿使用非程序编辑器编辑程序。我见过有人使用Winpad,并忘记将脚本保存为文本。相反,他们创建一个RTF格式的shell脚本。 RTF格式使得Unix BASH shell变得很难过。