Bashは、あるコマンドの出力を1行ずつ別のコマンドラインに供給します。

Bashは、あるコマンドの出力を1行ずつ別のコマンドラインに供給します。

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の内容を提供することです<<<$lineherestring$linexmllint

おすすめ記事