【问题标题】:Jenkins: special characters getting inserted in bash scriptJenkins:在 bash 脚本中插入特殊字符
【发布时间】:2011-12-10 22:30:51
【问题描述】:

我正在里面执行一个 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'

dollar quoting\r 正在造成严重破坏。我该如何解决?

【问题讨论】:

  • 我猜你在current_loc=/tmp/$BUILDTYPE...mkdir -p... 行中有'\r\n' 作为行分隔符
  • 像这样运行dos2unix 工具:dos2unix myscript 并尝试

标签: linux bash shell hudson jenkins


【解决方案1】:

你必须用类似命令替换'\r'符号

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

【讨论】:

    【解决方案2】:

    有几种方法可以在 Jenkins 中运行 BASH 脚本。方法 #1 是创建一个 bash 脚本并让 Jenkins 在构建过程中执行它。但是,您也可以直接在 Jenkins 中输入 BASH 脚本。你是用哪种方式做的?

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

    您可以使用程序编辑器重新编辑脚本,然后将行尾设置为 Unix 行尾。在 VIM 中,你可以这样做:

    :set ff=unix
    

    在命令模式下。

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

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

    不要使用非程序编辑器来编辑程序。我见过有人使用 Winpad 却忘记将脚本另存为 Text。相反,他们创建了一个 RTF 格式的 shell 脚本。 RTF 格式让 Unix BASH shell 难过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 2016-11-24
      • 2014-04-10
      相关资源
      最近更新 更多