需要建议执行 Ansible ad-hoc 命令输出产生的 awk 命令

需要建议执行 Ansible ad-hoc 命令输出产生的 awk 命令

当我使用 Ansible ad-hoc 命令执行以下命令来查找索引 ID 时:

$ ansible oamvip -i /storage/inventory/None/${myvnf}hosts --become -m shell -a "/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print \$2 }'"
xxx.xx.xxx.xxx | CHANGED | rc=0 >>
4818b4715eb6542838023
e520bec15eb6542838023 

sh但是,当我尝试对输出结果执行 shell 命令 ( ) 时awk,Ansible 会向我显示帮助菜单:

$ ansible oamvip -i /storage/inventory/None/${myvnf}hosts --become -m shell -a "/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print "aladmin show " \$2 | "sh"}'"
Usage: ansible <host-pattern> [options] 

我尝试过单引号、双引号、反斜杠,但无济于事。请指教。

答案1

"/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print \$2 }'"

从解析整个命令行的 shell 的角度来看,这只是一个字符串(单词)。我假设它被传递到sh -c.独立于你的问题,它应该是

"/usr/sbin/aladmin list | grep \"PartitionUsage\" | awk '{ print \$2 }'"

或者

"/usr/sbin/aladmin list | grep PartitionUsage | awk '{ print \$2 }'"

反而。

set -x
: "/usr/sbin/aladmin list | grep "PartitionUsage" | awk '{ print "aladmin show " \$2 | "sh"}'"
+ : '/usr/sbin/aladmin list | grep PartitionUsage | awk '\''{ print aladmin' show ' $2 | sh}'\'''

这是 shell 的三个词,因此ansibleshell 不理解这些参数。

又是那个".

awk '{ print "aladmin show " \$2 | "sh"}'

必须成为

awk '{ print \"aladmin show \" \$2 | \"sh\"}'

顺便提一句

(几乎一般情况下,特别是在这种情况下)没有理由

... | grep ... | awk ...

pipeline as(除了 PCRE 等少数例外)awk可以做所有grep能做的事情。

grep PartitionUsage | awk '{ print \$2 }'

=>

awk '/PartitionUsage/ { print \$2 }'

相关内容