gpt4 book ai didi

ansible - 如何在 Ansible(脚本模块)中转义反斜杠和双引号

转载 作者:行者123 更新时间:2023-12-04 14:24:33 24 4
gpt4 key购买 nike

我对 Ansible (2.x) 非常陌生,并且在使用脚本模块和使用双引号和反斜杠传递参数时遇到问题。

假设我们有一个集合变量 {{foo}}其中包含一个字符串“foo”,我有一个这样的任务:

set_fact:
arg: \(-name "{{foo}}" \)
name: call shell module
script: path/somescript.sh "{{arg}}"

我的脚本需要以下参数结构才能工作:
\(-name "foo" \)

我尝试了几件事,例如:
arg: \(-name \""{{foo}}"\" \)           result: \\(-name \"foo\" \\)

arg: '\(-name \""{{foo}}"\" \)' result: \\(-name \"foo\" \\)

arg: \\(-name \""{{foo}}"\" \\) result: \\(-name \"foo\" \\)

是否可以在 Ansible 中转义反斜杠和双引号?

最佳答案

不要对 ansible-playbook 以 JSON 编码形式打印调试消息的事实感到困惑,因此某些字符会被转义。

set_fact:
arg: \(-name "{{foo}}" \)
你有正确的语法。这将设置 arg\(-name "bar" \)如果 foo的值为 bar .
但这种情况下的调试消息将如下所示:
ok: [localhost] => {
"arg": "\\(-name \"bar\" \\)"
}
请注意,JSON 的特殊字符( "\ )被转义。
但是将其作为参数传递可能存在一些问题。
如果你这样调用你的脚本
script: path/somescript.sh "{{arg}}"
参数字符串将如下所示 "\(-name "bar" \)"这实际上是 bash 中的 3 个连接字符串: \(-name + bar + \) , 所以你会在栏周围失去双引号。
如果要保留这些双引号,请使用:
script: path/somescript.sh '{{arg}}'

关于ansible - 如何在 Ansible(脚本模块)中转义反斜杠和双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39580797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com