puppet手册之传递参数到shell命令

[导读]

本小节是接着上一章节puppet 手册之使用generate导入动态信息以及导入csv文件,

本小节的主要内容是如何传递参数到shell命令,很多同学都使用过exec资源来调用

shell命令来完成相关操作,在学习本小节之前,大家仔细回忆下,并比较下!

[正文]

传递参数到shell命令

如果你需要在命令行下插入一个值,他们通常需要被引用,尤其是如果值里包含空格.
shellquote功能能将任意的参数,包括数组和把每个参数用双引号引起来,
并返回以空格分隔的字符串,shellquote可以传递参数到命令行.

在这个例子中,我们想建立一个exec资源,exec资源是用来重命名一个文件,但两者
源和目标的名称都包含空格,因此,他们需要在命令行下正确的引用.

怎么办呢…
1.添加下面内容到你的代码:

$source = "Hello Jerry"
$target = "Hello... Newman"
$argstring = shellquote( $source, $target )
$command = "/bin/mv ${argstring}"
notify { $command: }

2.运行puppet:

notice: /bin/mv "Hello Jerry" "Hello... Newman"

它是如何工作的…
1.首先我们定义了$source和$target 两个变量,这两个变量是我们要在命令行
使用的文件名.

$source = "Hello Jerry"
$target = "Hello... Newman"

2.然后,我们调用shellquote,并以shellquote为分隔符,来连接这些变量.如下:

$argstring = shellquote( $source, $target )

3.接下来我们把它们组合在一起,成为了最终的命令行:

$command = "/bin/mv ${argstring}"

4.其结果是:

/bin/mv "Hello Jerry" "Hello... Newman"

5.现在可以在命令下行运行exec资源.
如果我们不使用shellquote会发生什么?

$source = "Hello Jerry"
$target = "Hello... Newman"
$command = "/bin/mv ${source} ${target}"
notify { $command: }
notice: /bin/mv Hello Jerry Hello... Newman

这将无法工作,那是因为mv命令是要以空格分隔字符串参数,所以将其解释为
这要求三个文件Hello,Jerry,和Hello…直到目录名为Newman,这可不是
我们所希望看到的.

[总结]

此小节内容比较少,告大家两个消息,1是,我明天就回老家了,到时将不会更新puppet系列文章,

再告诉大家一个消息的,puppet cookbook,已经抽空翻译完了.再此,sky,先祝大家新年快乐,身体

健康,合家欢乐,睡觉睡到自然醒,数钱数到手抽筋,再次感谢大家的支持,希望大家可以继续关注

并支持www.mysqlops.com!

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>