mysqlの単一列からXMLを取得してブロックし、それを美しくするためにxmllintに供給する次のbashコマンドがあります。
mysql --format csv --skip-column-names -e "select xmldata from mytable limit 1;" | xmllint --format -
これまでは大丈夫でしたが、一度に1行だけで動作します。 SQLクエリ出力の各行がxmlintへの別々の呼び出しに提供されるようにこれを調整したいと思います。
私はこれがbashスクリプトのループを使って実行できることを知っています。しかし、可能であれば、1行のコードで実行したいと思います。おそらくこれはxargsを使って行うことができますが、わかりません。
答え1
mysql --format csv --skip-column-names \
-e "select xmldata from mytable limit 1;" \
| while IFS= read -r line; do xmllint --format - <<<"$line"; done
読みやすくするために分割する必要はありません。は標準入力としてtoの内容を提供することです<<<$line
。herestring
$line
xmllint
答え2
これは可能xargs
ですが、各行は標準入力ではなくxargs
引数として渡されます。にテキストを供給するには、シェルを呼び出すxmllint
必要があります。xargs
xmllint
mysql … | xargs -L 1 sh -c 'echo "$0" | xmllint --format -'
シェルループは最も簡単な方法です。行を繰り返す標準的な方法は次のとおりです。while IFS= read -r line; do …
。
mysql … |
while IFS= read -r line; do printf '%s\n' "$line" | xmllint --format -; done