【问题标题】:How to use pipe to sent parameters如何使用管道发送参数
【发布时间】:2018-11-29 08:16:48
【问题描述】:
我未能将一个命令的输出作为第二个命令的参数发送:
git diff --name-only HEAD | prettier --write
我想发送prettier所有修改过的文件,但我收到以下错误:
没有给出解析器,也没有给出文件路径,无法推断出解析器。
当我从第一个命令的输出中手动尝试一行时,它按预期工作:
prettier --write --write path-of-the-file/file1.bla
我的错误在哪里?
【问题讨论】:
标签:
linux
git
pipe
prettier
【解决方案1】:
错误可能是因为通过管道传输的命令,即prettier 不会从标准输入中读取,而是仅在作为位置参数 (prettier <input-args>) 传递时才读取。通常,当命令通过管道传输时,第一个命令的标准输出连接到其后一个命令的标准输入。
使用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)