我有一个相当简单的ansible adhoc命令,使用shell运行chfn:
ansible all -i ./inventory/all -s -K -m shell -a 'chfn -f "$HOSTNAME root" root'
chfn需要双引号,我已经尝试了几种不同的方法来逃避它们而没有运气。我已经尝试用双引号和单引号包装shell命令,并使用/来转义双引号并尝试使用单引号。运行chfn -f "$HOSTNAME root" root
工作正常,但我无法弄清楚如何以这种方式运行它。 (我知道这是一个选项,但我宁愿不把它变成一个shell脚本,如果可能的话通过ansible运行它)
答案 0 :(得分:1)
当嵌套引号时(如下面的示例中所示),您可以通过用另一个单引号转义来转义单引号。
将周围的引号引起来单引号',然后就不需要对双引号“进行转义,并且可以在命令中使用另一个单引号”来对单引号进行转义>
- name: Notify on slack
command: 'curl -X POST -H ''Content-type: application/json'' --data ''{"text":"{{inventory_hostname}} has been updated"}'' https://hooks.slack.com/services/XXXX/YYY/ZZZ'
when: inventory_hostname == 'host1.de' or inventory_hostname == 'host.de'
delegate_to: localhost
答案 1 :(得分:0)
ansible localhost -a 'echo \"$HOSTNAME\"'
localhost | SUCCESS | rc=0 >>
"$HOSTNAME"
ansible localhost -a "echo $HOSTNAME"
localhost | SUCCESS | rc=0 >>
my_hostname