如何使用管道发送参数
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 很新,并且它支持进程替换,您可以 运行 命令 prettier
为 git diff
的每个输出行作为
while IFS= read -r op; do
prettier --write "$op"
done< <(git diff --name-only HEAD)
我无法发送一个命令的输出作为第二个命令的参数:
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 很新,并且它支持进程替换,您可以 运行 命令 prettier
为 git diff
的每个输出行作为
while IFS= read -r op; do
prettier --write "$op"
done< <(git diff --name-only HEAD)