これはなんですか
- AWS CLI で
--output text
指定するときに出力を改行表示させる方法です。 - AWS CLI の出力を xargs で渡すときにこけたのでメモとして書きます。
結論
以下例のように --query
オプションで []
を使って明示的にリストとして出力すれば良い。
WAFのWebACL一覧を取得する例
$ aws waf list-web-acls --query "WebACLs[*].[WebACLId]" --output text
詳細
たとえばCLIでWAFのWebACL ID一覧を取得することを考える。何も考えずに以下のコマンドを実行すると、IDがタブ区切りで出力される:
タブ区切りになる
$ aws waf list-web-acls --query "WebACLs[*].WebACLId" --output text
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ...
これを改行区切りで出力するためには、次のようにクエリ内で明示的に []
を使ってリストとして結果を得ればよい。
改行になる
$ aws waf list-web-acls --query "WebACLs[*].[WebACLId]" --output text
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
...
改行なしの出力を xargs に渡す場合は後者の方法を取ると良い。改行なしの場合は -n 1
で逃げられるが、うまく聞かない環境もあるので個人的にはオススメしない。
ちなみに、 --output table
とすると、どちらの場合も同じ出力が得られる。
$ aws waf list-web-acls --query "WebACLs[*].WebACLId" --output table
------------------------------------------
| ListWebACLs |
+----------------------------------------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| ... |
+----------------------------------------+