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



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

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

将周围的引号设为单引号 ' ,这样你就不需要转义双引号 ",您可以使用另一个单引号(如 '' (转义命令中的单引号

 - 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

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

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

最新更新