【发布时间】:2015-04-24 08:13:58
【问题描述】:
我有一份 Jenkins 工作,作为参数化构建触发。它接受一个可选的字符串参数 (HOSTNAMES),可以是逗号分隔的主机名列表。
我需要将此以逗号分隔的主机名列表作为命令行参数传递给 PERL 脚本(在执行 shell 构建步骤中)。
这是我在执行 shell 构建步骤中处理输入参数和构造命令行参数的方式:
cmd_options=''
echo hostnames is $HOSTNAMES
if [ "$HOSTNAMES" != "" ]
then
cmd_options+=" --hostnames \"$HOSTNAMES\""
fi
perl myscript.pl $cmd_options
在构建的控制台输出中,我看到参数传递不正确。这是控制台输出:
+ cmd_options=
+ echo hostnames is host1, host2
hostnames is host1, host2
+ '[' 'host1, host2' '!=' '' ']'
+ cmd_options+=' --hostnames "host1, host2"'
+ perl myscript.pl --hostnames '"host1,' 'host2"'
我希望myscript.pl 被这样称呼:
perl myscript.pl --hostnames "host1, host2"
我尝试过使用单引号和双引号来处理$cmd_options 的各种方法,但到目前为止都没有成功。任何关于我哪里出错的指针?
【问题讨论】:
-
为什么不改写 Perl 脚本呢?
-
我能做到。但我提出这个问题的目的更多是为了试图了解 shell 脚本的更详细的细节以及我错过了什么。
-
你用的是什么外壳?
-
$HOSTNAMES是环境变量还是您以某种方式从命令行参数中获取它的值? -
$HOSTNAMES将是 Jenkins 构建环境中的环境变量。
标签: sh double-quotes single-quotes