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
ただし、出力でシェルコマンド()を実行しようとすると、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 }'"
コマンドライン全体を解析するシェルの観点から、これは単なる文字列(単語)です。私はそれがあなたの質問に関係なく伝えられたと仮定します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}'\'''
これはシェルを表す3つの単語なので、ansible
シェルはこれらのパラメータを理解していません。
またそれ"
。
awk '{ print "aladmin show " \$2 | "sh"}'
しなければならない
awk '{ print \"aladmin show \" \$2 | \"sh\"}'
ところで
(ほぼ一般的ですが特にこの場合)理由なし
... | grep ... | awk ...
パイプラインは(PCREなどのいくつかの例外を除いて)できるawk
すべての操作を実行できますgrep
。
grep PartitionUsage | awk '{ print \$2 }'
=>
awk '/PartitionUsage/ { print \$2 }'