如何将一个命令的输出作为参数传递给另一个命令

如何将一个命令的输出作为参数传递给另一个命令

有人提出了类似的问题,但由于我是新手,Unix由于上下文的原因,我不清楚答案。我想要做的是将一个命令的输出作为参数传递给另一个命令。我使用 git 进行源代码控制并在三个不同的分支上工作。

每当我需要提交时,我必须检查我的分支,然后给出相应的命令

git pull --rebase origin <branch-name>

我想写一个别名 as git-rebase,它要做的就是首先执行git branch.

git分支的输出如下所示

experiment
*master
new feature

因此,如果除了主分支之外我们还有两个分支,那么它将显示所有分支,并且当前分支将被星号标记。我想提取星号标记的行,然后将其输出传递给上面的命令。

我还想抑制命令的输出git branch。我这样做并不是因为我懒得输入整个命令,而是因为我想更多地了解 unix bash 的强大功能。希望能从中学到一些东西

答案1

首先,您需要将git branch输出转换为可用的格式

$ git branch
  experiment
* master
  new feature

$ git branch | awk '/^\* / { print $2 }'
master

现在,您想使用它作为参数:

$ git pull --rebase origin $(git branch | awk '/^\* / { print $2 }')

(或者您可以使用反引号,如 psusi 的答案)。

应该没关系,awk 命令应该始终与一行完全匹配,并且我假设分支名称中不能有空格。对于任何更复杂的事情,我可能会将其包装到一个函数(或脚本)中,这样您就可以对中间值进行一些健全性检查。

答案2

还有xargs命令。

xargs - build and execute command lines from standard input

所以@Useless的上述答案将转化为:

git branch | sed -ne 's/\*//p' | xargs git pull --rebase origin

答案3

有几种方法。最简单的是反引号替换:

git pull --rebase origin `git branch | sed -ne 's/\*//p'`

相关内容