2017-08-10 1050 views
0

我正在使用ansible -a命令在我的库存上执行一些命令(df -h,检查文件夹...)。但是现在,我需要创建一个所有用户主机使用以下命令Ansible shell命令-a带特殊字符“

I'm:。?。

ansible -i [INVENTORYNAME].inventory allservers -m shell -a "sudo useradd -c "Name & lastname" [USERNAME]" >> [FILE].txt --extra-vars "ansible_sudo_pass=[MYPASS]" -b 

但doesn't工作,我怎么能包含特殊字符在我的命令

谢谢

回答

3

你目前的命令有nes特德双引号。

您可以使用外单引号:

ansible -i inventory all -m shell -a 'sudo useradd -c "Name & lastname" [USERNAME]' >> [FILE].txt --extra-vars "ansible_sudo_pass=[MYPASS]" -b 

或转义双引号内:

ansible -i inventory all -m shell -a "sudo useradd -c \"Name & lastname\" [USERNAME]" >> [FILE].txt --extra-vars "ansible_sudo_pass=[MYPASS]" -b 

第二个选项将允许您包括执行Ansible命令的计算机环境变量(你的电脑)。

作为一个方面说明,我强烈建议使用user module
sudo也是多余的,如果你使用-b

+0

它的工作原理有时,但其他人表现: [主持人] |失败| rc = 127 >> /bin/sh:useradd:command not found 感谢您的建议 – Ramos

+0

这与Ansible无关。这可能是因为你有不同的Linux发行版的混合。 在CentOS/Fedora上,您需要以root身份运行useradd,并且完整路径为/ usr/sbin/useradd - 使用命令的完整路径或将/ usr/sbin添加到$ PATH。 – Thanh

+1

同样,你是对的! 谢谢 – Ramos