【问题标题】:Bash pipe arguments does not seem to pass through [duplicate]Bash管道参数似乎没有通过[重复]
【发布时间】:2022-01-04 22:54:11
【问题描述】:

我不是一个非常熟练的 linux 用户,我正在尝试为 vscode 进行自动化,以便我可以在 vscode 中打开所有带有差异的文件。我目前的建议是:

git diff master...[BRANCH_NAME] --name-only |code -r

第一部分git diff master...[BRANCH_NAME] --name-only 非常好用:

src/components/LeftDrawerMenu/TaskForm/index.js
src/services/util.js

但是code -r 没有将输出注册为输入。它就像没有参数一样运行。

我想要以下:

code -r src/services/util.js src/components/LeftDrawerMenu/TaskForm/index.js

但是

code -r src/services/util.js 
code -r src/components/LeftDrawerMenu/TaskForm/index.js 

也会给出预期的结果。我做错了什么?

【问题讨论】:

  • git diff master...[BRANCH_NAME] --name-only | xargs -d '\n' code -r
  • 非常感谢。非常欢迎您到@konsolebox 将其变成答案,以便我接受它

标签: linux bash


【解决方案1】:

恐怕无法正确处理用于不同输出线的管道。您是否已经尝试过:

code -r $(git diff master...[BRANCH_NAME] --name-only)

【讨论】:

  • 抱怨。并不是说这在简单的情况下不起作用,而是未引用的命令替换有一堆通常不需要的行为(全局扩展,IFS 上的分词);最好用readarray -t myarray < <(...)mapfile-t myarray < <(...)IFS=$'\n' read -r -d '' -a myarray < <(... && printf '\0') 读入一个数组,然后展开该数组。
  • 更好的是git diff master...BRANCH_NAME --name-only | xargs -d $'\n' code -r,即使名称列表太长而无法放在单个命令行上,它也可以正常工作(通过拆分为多个code 调用)。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多