在Ansible中如何对变量执行Shell安全转义操作?
问题答复
Ansible 原生自带quote过滤器,功能和printf '%q'完全一致,可自动转义字符串中的空格、反斜杠等所有shell特殊字符,满足你的转义需求,该过滤器在Ansible 2.10及以上版本均可直接使用。
修复后的任务配置(使用quote过滤器)
- name: "Install Python packages" ansible.builtin.pip: name: - "foobar" extra_args: "--no-index --find-links=file://{{ role_path | quote }}/files/pip/"
更稳妥的无转义方案
你也可以直接将extra_args定义为列表格式,每个参数作为独立列表元素,可完全规避shell解析的问题,无需额外做转义处理:
- name: "Install Python packages" ansible.builtin.pip: name: - "foobar" extra_args: - "--no-index" - "--find-links=file://{{ role_path }}/files/pip/"
该方案的原理是:当extra_args传入列表时,Ansible会直接将每个元素作为独立参数传递给pip命令,不会经过shell的字符串拆分步骤,哪怕路径包含特殊字符也不会被错误解析。
内容的提问来源于stack exchange,提问作者macdjord
相关产品推荐
相关产品推荐

