侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

ansible的shell模块

zze
zze
2020-03-28 / 0 评论 / 0 点赞 / 542 阅读 / 1629 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

此文章为「ansible笔记(2)之常用模块」的子文章。

shell 模块可以帮助我们在远程主机上执行命令,与 command 模块不同的是,shell 模块在远程主机中执行命令时,会经过远程主机上的 /bin/sh 程序处理。

学习此模块之前,请先参考「command 模块」。

参数说明:

  • free_form:必须参数,指定需要远程执行的命令,但是并没有具体的一个参数名叫 free_form,具体解释参考 command 模块;
  • chdir:此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到 chdir 参数指定的目录中;
  • creates:使用此参数指定一个文件,当指定的文件存在时,就不执行对应命令,可参考 command 模块中的解释;
  • removes:使用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令,可参考 command 模块中的解释;
  • executable:默认情况下,shell 模块会调用远程主机中的 /bin/sh 去执行对应的命令,通常情况下,远程主机中的默认 shell 都是 bash,如果你想要使用其他类型的 shell 执行命令,则可以使用此参数指定某种类型的 shell 去执行对应的命令,指定 shell 文件时,需要使用绝对路径;

shell 模块中 chdircreatesremoves 参数的作用与 command 模块中的作用都是相同的,此处不再举例。

例 1:使用 shell 模块可以在远程服务器上执行命令,它支持管道与重定向等符号。

$ ansible all -m shell -a "chdir=/testdir echo test > test"

例 2:如果你想要执行的命令需要 csh 解析,那么可以指定使用 csh 在远程主机上执行对应的命令,比如在如下示例中,我们使用 csh 的语法定义了一个数字类型的变量 TestNum,然后将 TestNum 变量的值重定向到了 /testdir/TestNumFile,在 bash 中,@ 符号不能用于定义变量,所以,可以使用 executable 指定需要的 shell 类型。

$ ansible all -m shell -a 'executable=/bin/csh @ TestNum=666 ; echo $TestNum > /testdir/TestNumFile'
0

评论区