
有人提出了類似的問題,但由於我是新手,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'`