引号内的Ansible ad-hoc shell命令引号 - 如何转义?

时间:2017-05-15 18:37:18

标签: ansible ansible-ad-hoc

我有一个相当简单的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运行它)

2 个答案:

答案 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是非常棘手的。如果你想按原样传递它,你必须逃避引号。以下是一些例子:

ansible localhost -a 'echo \"$HOSTNAME\"'
localhost | SUCCESS | rc=0 >>
"$HOSTNAME"

ansible localhost -a "echo $HOSTNAME"
localhost | SUCCESS | rc=0 >> 
my_hostname