如何使用管道发送参数

How to use pipe to sent parameters

我无法发送一个命令的输出作为第二个命令的参数:

git diff --name-only HEAD | prettier --write

我想发送 prettier 所有修改后的文件,但我收到以下错误:

No parser and no file path is given, couldn't infer a parser.


当我在第一个命令的输出的一行上手动尝试时,它按预期工作:

 prettier --write --write path-of-the-file/file1.bla

我的错误在哪里?

错误可能是因为管道通过的命令,即 prettier 不是从标准输入读取,而是仅当作为位置参数传递时 (prettier <input-args>)。通常,当命令通过管道传输时,第一个命令的标准输出连接到其后命令的标准输入。

使用 xargs 就是为了这个。管道从上一个命令接收到的输出并轻松传递它。它应该适用于 FreeBSD 和基于 GNU 的系统。

git diff --name-only HEAD | xargs -I {} prettier --write "{}"

或者如果您的 shell 很新,并且它支持进程替换,您可以 运行 命令 prettiergit diff 的每个输出行作为

while IFS= read -r op; do
    prettier --write "$op"
done< <(git diff --name-only HEAD)