在bash中为git命令提供参数

在bash中为git命令提供参数,bash,git,Bash,Git,我不太了解bash,我目前有一个别名: alias pushAndTrackBranch="git push -u origin" #Append branchname 之后我手动键入我的git分支名称。我想自动使用当前分支,因此我发现: git branch | grep \* | cut -d ' ' -f2 并试图将它们结合起来: git branch | grep \* | cut -d ' ' -f2 | git push -u origin git push -u origin

我不太了解bash,我目前有一个别名:

alias pushAndTrackBranch="git push -u origin" #Append branchname
之后我手动键入我的git分支名称。我想自动使用当前分支,因此我发现:

git branch | grep \* | cut -d ' ' -f2
并试图将它们结合起来:

git branch | grep \* | cut -d ' ' -f2 | git push -u origin
git push -u origin | git branch | grep \* | cut -d ' ' -f2
git branch | grep \* | cut -d ' ' -f2 | pushAndTrackBranch
git branch | grep \* | cut -d ' ' -f2 | echo | pushAndTrackBranch
我没有幸运地得到关于管道的答案,因此我认为作为bash_概要文件的开始,我应该将分支名称分配给一个变量并打印它:

function pushAndTrack {
  myBranch=$(grep \* | cut -d ' ' -f2)
  echo myBranch
}
以上是我的最新化身,但它是不正确的。我如何将这两件事结合起来?我是否应该将分支名称保存在变量中

编辑:我在函数尝试中看到,我忘记了试图保存在变量中的命令的一部分。当然应该是:

function pushAndTrack {
  myBranch=$(git branch | grep \* | cut -d ' ' -f2)
  echo $myBranch
}
这应该可以完成任务。管道将上一个命令的输出传递给下一个命令的stdin,而不是作为命令行arg

您还可以使用
xargs

这应该可以完成任务。管道将上一个命令的输出传递给下一个命令的stdin,而不是作为命令行arg


您还可以使用
xargs

您希望
grep\*
做什么?反斜杠由shell使用,而不是传递给
grep
,因此
grep
作为参数得到的只是
*
,它不是有效的正则表达式。@BenjaminW.,…如何?我知道
grep'[*]'
(我的选择)或
grep'\*'
将如何做到这一点,但不知道
grep\*
将如何做到这一点,除非您有一个不符合
grep
,它会自动忽略无效的正则表达式语法。@CharlesDuffy是的,意识到这一点并删除了注释;)@Adam,…而且,
echo“$myBranch”
,而不是
echo myBranch
,如果您想发出变量的值……也就是说,看起来广泛使用的grep实现确实以这种方式运行,将前导的
*
视为要匹配的文字字符,而不是前一个字符的修饰符(如正则表达式语法所要求的)。尽管如此,我不建议相信这种行为是可移植的。你希望
grep\*
做什么?反斜杠由shell使用,而不是传递给
grep
,因此
grep
作为参数得到的只是
*
,它不是有效的正则表达式。@BenjaminW.,…如何?我知道
grep'[*]'
(我的选择)或
grep'\*'
将如何做到这一点,但不知道
grep\*
将如何做到这一点,除非您有一个不符合
grep
,它会自动忽略无效的正则表达式语法。@CharlesDuffy是的,意识到这一点并删除了注释;)@Adam,…而且,
echo“$myBranch”
,而不是
echo myBranch
,如果您想发出变量的值……也就是说,看起来广泛使用的grep实现确实以这种方式运行,将前导的
*
视为要匹配的文字字符,而不是前一个字符的修饰符(如正则表达式语法所要求的)。尽管如此,我不建议相信这种行为是可移植的。
git push -u origin $(git branch | grep '\*' | cut -d ' ' -f2)