2

我有一个相当简单的 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 以这种方式运行)

4

2 回答 2

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
于 2018-10-23T12:49:05.610 回答
0

ansible 在临时命令中对此很棘手。如果您想按原样传递它,则必须转义引号。下面的一些例子:

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

ansible localhost -a "echo $HOSTNAME"
localhost | SUCCESS | rc=0 >> 
my_hostname
于 2018-01-09T17:51:08.860 回答