【问题标题】: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)
    

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 2020-01-09
      • 1970-01-01
      • 2017-01-25
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多