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

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

我想发送所有修改过的文件,但出现以下错误:
没有提供分析器和文件路径,无法推断分析器。
当我从第一个命令的输出中在一行上手动尝试时,它按预期工作:
 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很新,并且它支持进程替换,那么您可以为prettier的每个输出行运行命令git diff,如下所示
while IFS= read -r op; do
    prettier --write "$op"
done< <(git diff --name-only HEAD)

关于linux - 如何使用管道发送参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53534503/

10-13 06:43