代码之家  ›  专栏  ›  技术社区  ›  Stav Alfi

如何使用管道发送参数

  •  0
  • Stav Alfi  · 技术社区  · 7 年前

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

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

    我想寄 prettier 所有已修改的文件,但我得到以下错误:


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

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

    我的错在哪里?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Inian    7 年前

    prettier 不从标准输入读取,但仅在作为位置参数传递时读取( prettier <input-args> ). 通常,当命令通过管道传输时,第一个命令的标准输出连接到它后面的一个命令的标准输入。

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

    git diff --name-only HEAD | xargs -I {} prettier --write "{}"
    

    或者,如果您的shell非常新,并且它支持进程替换,那么您可以运行该命令 漂亮的 git diff 作为

    while IFS= read -r op; do
        prettier --write "$op"
    done< <(git diff --name-only HEAD)