在 bash 中,将一个命令行的输出逐行输入到另一个命令中

fra*_*lic 5 bash

我有以下 bash 命令,它从 mysql 的单个列中获取和阻止 XML,并将其提供给 xmllint 以对其进行美化。

mysql --format csv --skip-column-names -e "select xmldata from mytable limit 1;" | xmllint --format -
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但它一次只适用于一行。我想对此进行调整,以便将 SQL 查询输出中的每一行都输入到对 xmlint 的单独调用中。

我知道这可以通过 bash 脚本中的循环来完成——但如果可能的话,我想在单行中完成。据说这可以用 xargs 来完成,但我无法弄清楚。

Kev*_*vin 6

mysql --format csv --skip-column-names \
    -e "select xmldata from mytable limit 1;" \
    | while IFS= read -r line; do xmllint --format - <<<"$line"; done
Run Code Online (Sandbox Code Playgroud)

拆分以便于阅读,显然您不需要这样做。的<<<$line是herestring,该进料的含量$line,以xmllint作为标准输入。