我有一个非常复杂的命令,我需要通过shell:命令运行,但它有我需要保留的各种特殊字符。我还希望能够将 var 添加到多个环境的命令行中。
我应该如何格式化它,这样我就不会收到各种古怪的错误。
shell: OC_EDITOR="sed -i 's/node-selector:.*/node-selector: \"region=primary, zone=blah\"/'" oc edit namespace default
稍后我将区域更改为变量 {{ 区域 }}
您可以将 as 任务和注册变量与环境变量一起使用。我还没有尝试过这个,但它可能会起作用。
- name: Echo OC_EDITOR
shell: "echo $OC_EDITOR"
environment:
OC_EDITOR: "sed -i 's/node-selector:.*/node-selector: "region=primary, zone=blah"/'" oc edit namespace default
register: sed_command
- name: Execute OC_EDITOR
shell: sed_command
我遇到的问题是单引号而不是反斜杠。不需要转义其他字符。我还用单引号将整个命令括起来。
这是通过 --check 函数工作的最终工作命令。我正在重新运行以验证它是否有效。
- name: EXECUTE - Change the node selectors for the default and openshift-infra projects
shell: 'OC_EDITOR="sed -i ''s/node-selector:.*/node-selector: region=infra, zone=blah"/''" oc edit namespace default'
ignore_errors: True
希望这对那里的人有所帮助。
更新并删除了多余的反斜杠。