Ansible:如何使用`ansible -a`执行多条命令?
Ansible
-a 参数与多命令执行问题 你遇到的这个情况确实是因为Ansible默认的command模块(也就是-a参数对应的模块)会跳过shell解析,直接执行指定的程序。像&&、;这类属于shell的控制元字符,不会被识别处理,只会被当作普通的字符串参数传给echo命令,所以才会输出hello && echo world这种结果——相当于你直接执行了echo "hello && echo world"。
要执行多条命令,有两种常用的解决办法:
使用
shell模块替代默认的command模块
直接加上-m shell参数,让命令通过目标主机的shell来解析执行,这样&&、;这些元字符就能正常工作了:ansible host -m shell -a "echo hello && echo world"通过shell来包裹命令(仍用
command模块)
如果一定要用默认的command模块,可以把整个命令串作为参数传给shell程序,让shell来处理解析:ansible host -a "/bin/sh -c 'echo hello && echo world'"这里要注意引号的嵌套,外层用双引号的话,内层可以用单引号(反之亦然),避免被本地shell提前解析。
简单总结下:command模块更安全,适合执行单一的、不需要shell特性的命令;如果需要用到管道、重定向、多命令串联这类shell功能,直接用shell模块会更方便。
内容的提问来源于stack exchange,提问作者Yasunori Kuji
相关产品推荐
相关产品推荐

