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

Ansible ad-hoc shell命令引号内的引号-如何转义?,ansible,ansible-ad-hoc,Ansible,Ansible Ad Hoc,我有一个非常简单的ansible临时命令,使用shell运行chfn: ansible all -i ./inventory/all -s -K -m shell -a 'chfn -f "$HOSTNAME root" root' chfn需要双引号,我尝试了几种不同的方法来摆脱它们,但没有运气。我尝试过用双引号和单引号包装shell命令,并使用/来转义双引号和单引号。运行chfn-f“$HOSTNAME root”root很好,但我不知道如何让ansible以这种方式运行它。(我知道这是

我有一个非常简单的ansible临时命令,使用shell运行chfn:

ansible all -i ./inventory/all  -s -K -m shell -a 'chfn -f "$HOSTNAME root" root'

chfn需要双引号,我尝试了几种不同的方法来摆脱它们,但没有运气。我尝试过用双引号和单引号包装shell命令,并使用/来转义双引号和单引号。运行
chfn-f“$HOSTNAME root”root
很好,但我不知道如何让ansible以这种方式运行它。(我知道这是一个选项,但我不希望将其转换为shell脚本,并尽可能通过ansible以这种方式运行)

ansible在特殊命令中很难做到这一点。如果您想按原样传递它,就必须转义引号。以下是一些例子:

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

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

当您有嵌套的引号时,如下面的示例中所示,您可以通过使用另一个单引号对单引号进行转义来对其进行转义

将周围的引号设为单引号',则不需要转义双引号“,并且可以在命令中使用另一个单引号转义单引号,如“”

 - 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