当前位置: 首页 > 面试题库 >

如何在shell脚本中将当前git分支的名称转换为变量?

鄢承运
2023-03-14
问题内容

我是Shell脚本的新手,无法解决这个问题。如果您不熟悉,则命令git branch返回类似

* develop
  master

,其中星号标记当前已签出的分支。当我在终端中运行以下命令时:

git branch | grep "*"

我得到:

* develop

如预期的那样。

但是,当我跑步时

test=$(git branch | grep "*")

要么

test=`git branch | grep "*"`

然后

echo $test

,结果只是目录中文件的列表。我们如何使test =“ *开发”的价值?

然后,下一步(一旦我们将“ *开发”变成名为test的变量),就是要获得子字符串。只是以下内容吗?

currentBranch=${test:2}

我正在使用该子字符串函数,但出现很多“错误替换”错误,不知道为什么。


问题答案:

*被展开,您可以使用sed而不是grep并立即获得分支的名称:

branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')

以及Noufal Ibrahim建议的使用git symbolic-ref的版本

branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

要详细说明扩展(如marco所做的那样),扩展是在回显中进行的,当您echo $test使用包含“ * master”的$
test时,*将根据常规扩展规则进行扩展。为了抑制这种情况,必须引用该变量,如marco:所示echo "$test"。另外,如果您在回显星号之前将其删除,则一切都会很好,例如,echo ${test:2}仅回显“
master”。或者,您可以按照您已经提出的建议重新分配它:

branch=${test:2}
echo $branch

如您所愿,这将回显“ master”。



 类似资料:
  • 问题内容: 如何在bash脚本中将路径名中的转换为绝对路径名。也就是说,如果我有一个path ,那么在这种情况下,我希望将其更改为其中没有点的路径 我怎样才能做到这一点? 问题答案: 您正在寻找的是 : 请注意: 您需要使用提供“ -m”选项的GNU 实现。例如,BSD 则没有。

  • 我想在声明性Jenkins管道中使用git标记。我的詹金斯档案是这样的 但是环境变量总是空的。经过一些调查,我在Jenkins的日志中注意到这一点: 有没有办法告诉詹金斯跳过参数? 因为我事先不知道提交是如何标记的,所以我想从git中签出标签并将其用作变量。所以这个问题的解决方案在这里是不可行的。

  • 问题内容: 如何获取包含Python中当前正在执行的函数的变量?我不需要函数的名称。我知道我可以用来获取当前的函数名称。我想要实际的可调用对象。是否可以不使用检索函数名称,然后输入名称以获取可调用对象而完成此操作? 编辑: 我有这样做的理由,但它甚至不是一个很好的选择。我正在使用plac解析命令行参数。您可以通过使用来使用它,它会根据“ main”的函数签名生成一个ArgumentParser对象

  • 拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?

  • 问题内容: 我正在尝试获取当前正在运行的Python脚本的名称。 我有一个名为的脚本,我想做这样的事情以获得脚本名称: 问题答案: 您可以使用获取当前文件的名称。在主模块中使用时,这是最初调用的脚本的名称。 如果要省略目录部分(可能存在),可以使用。

  • 我有四个分支,如master->origin/regacy,FeatureA->origin/FeatureA。如你所见,我打错了名字。 因此我想重命名一个远程分支名称(origin/regacy origin/legacy或origin/master) 但Git console向我返回了一条错误消息。 我该如何解决这个问题呢?