有人提出了类似的问题,但由于我是新手,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'`