Linux 如何使用管道发送参数

Linux 如何使用管道发送参数,linux,git,pipe,prettier,Linux,Git,Pipe,Prettier,我无法将一个命令的输出作为第二个命令的参数发送: git diff --name-only HEAD | prettier --write 我想发送prettier所有修改过的文件,但出现以下错误: 未提供语法分析器和文件路径,无法推断语法分析器 当我在第一个命令输出的一行上手动尝试时,它按预期工作: prettier --write --write path-of-the-file/file1.bla 我的错误在哪里?错误可能是因为通过管道传输的命令,即prettier不从标准输入读

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

git diff --name-only HEAD | prettier --write
我想发送
prettier
所有修改过的文件,但出现以下错误:

未提供语法分析器和文件路径,无法推断语法分析器


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

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


我的错误在哪里?

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

使用
xargs
正是为了实现这一点。通过管道传输从上一个命令接收的输出,并轻松地传递它。它应该可以在FreeBSD和基于GNU的系统上工作

git diff --name-only HEAD | xargs -I {} prettier --write "{}"
或者,如果您的shell非常新,并且它支持进程替换,那么您可以为
git diff
的每个输出行运行命令
prettier

while IFS= read -r op; do
    prettier --write "$op"
done< <(git diff --name-only HEAD)
而IFS=read-r op;做
更漂亮--写“$op”
完成<