首页 > 解决方案 > Ansible shell 模块中的 awk 提供了意外的换行符或字符串结尾

问题描述

- shell: " su {{user}} -c 'ps -ef | awk \'{print $2}\''"
  register: result
  

{print 后收到意外的换行符或字符串结尾错误

我必须使用 su 而不是成为插件,还必须使用 awk 过滤输出

AWK(意外的换行符或字符串结尾)

有没有办法为下面的命令转义“内部打印。(\”不起作用)

"su {{user}} -c 'ps -ef | awk \'{print "$2"}\''"

标签: bashshellawkansible

解决方案


实现目标的逃避可能性的非详尽列表。这里的问题是 yaml 在到达您的 shell 之前应用了自己的转义序列。你可以找到更多的可能性。

取1:

- shell: "su {{ user }} -c \"ps -ef | awk '{print \\$2}'\""
  register: result

取2:

- shell: su {{ user }} -c "ps -ef | awk '{print \$2}'"
  register: result

取3:

- shell: su {{ user }} -c 'ps -ef | awk "{print \$2}"'
  register: result

采取 4(来自@Paolo 的修复解决方案):

- shell: su {{ user }} -c 'ps -ef | awk '\''{print $2}'\'
  register: result

...最终将继续...


推荐阅读