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