gpt4 book ai didi

bash - 如何在ansible shell模块中转义特殊字符

转载 作者:行者123 更新时间:2023-12-03 19:48:41 26 4
gpt4 key购买 nike

我尝试了 bash 转义和双引号方法来转义以下 shell 命令中的特殊字符,但两者都不起作用,在 ansible playbook 中转义特殊字符的正确方法是什么?

 The offending line appears to be:

name: Syncing system date with htpdate failed!, Trying wget method...
shell: date -s "$(curl -s --head http://google.com | grep '^Date:' | sed 's/Date: //g' ) +0530"
^ here

exception type: <class 'yaml.scanner.ScannerError'>
exception: mapping values are not allowed in this context
in "<unicode string>", line 15, column 93

最佳答案

这里的问题之一是冒号后跟空格 : .这通常是映射键的指示符。

YAML 不允许在一行上嵌套映射,例如:

foo: bar: baz

这就是为什么 YAML 设计者选择禁止 :如果它与键在同一行,则在映射值中。 (它也可以通过简单地忽略进一步的事件并将其视为常规内容来解决。)

你有几个选择。您可以将整个值放在引号中,在这种情况下这不是一个好主意,因为您有单引号和双引号,然后您必须转义。

一种解决方法是转义 sed 命令中的空格:
shell: date -s "$(curl -s --head http://google.com | grep '^Date:' | sed 's/Date:\ //g') +0530"

更通用的解决方案是使用折叠 block 标量:
shell: >
date -s "$(curl -s --head http://google.com | grep '^Date:' | sed 's/Date: //g') +0530"

您现在甚至可以将其分成几行,因为折叠 block 标量会将连续的行折叠成一行:
shell: >
date -s "$(curl -s --head http://google.com
| grep '^Date:' | sed 's/Date: //g') +0530"

正如哈维尔所说,第二个问题是 sed 表达式 s/Date/: //g .你可能想要 s/Date: //g .另请查看@tripleee 如何改进您的命令的建议。

关于bash - 如何在ansible shell模块中转义特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48787560/

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