匹配git commit消息中的字符串并将其导出的shell脚本

我尝试编写一个shell脚本(bash)。

脚本的目的是

  • 获取上一次git commit的消息
  • 在最后一个git commit消息的[]-括号内抓取任何内容
  • 将该内容导出到名为GIT_COMMIT_MESSAGE_CONTEXT的环境变量中

示例:

最后一个git commit消息=“ [阶段]-gitlab试用”

工作示例:导出的环境变量应为

echo $GIT_COMMIT_MESSAGE_CONTEXT

Stage

我发现了以下内容,以获取上一次git commit的消息:

echo $(git log -1 --pretty=%B)

[Stage] - gitlab trial

我是bash脚本的新手,因此到目前为止,我的试用(见下文)有些欠佳。 也许有人有更多经验可以在这里提供帮助。

我的bash脚本(my-bash-script.sh)如下所示:

#!/usr/bin/bash

# get last git commit Message
last_git_commit_message="$(git log -1 --pretty=%B)"

export LAST_GIT_COMMIT_MESSAGE="$last_git_commit_message"

我在终端中运行bash脚本,如下所示:

bash my-bash-script.sh

关闭/重新打开终端后,我输入:

echo $LAST_GIT_COMMIT_MESSAGE


很遗憾,没有任何结果。

这是我的问题:

  1. 为什么运行bash脚本后我没有得到任何环境变量的回声?
  2. 如何扣除最后一个git commit消息的[] -parenthis内容?
  3. 如何重写我的脚本?
yu8023fei 回答:匹配git commit消息中的字符串并将其导出的shell脚本

脚本看起来不错,但是方法有缺陷。 Bash只能将变量导出到子shell,反之亦然。调用脚本时,将启动新的外壳程序。脚本退出后,该外壳程序中的所有变量,甚至导出的变量都将丢失。另请参见here

解决该问题的一些可能方法:

  1. 获取脚本。
  2. 让脚本打印该值并捕获其输出:variable=$(myScript)
  3. 将脚本写为.bashrc内部的bash函数。

根据您要执行的操作,我建议2或3。要执行3,请将以下内容放入~/.bashrc(如果使用Mac OS,则为~/.bash_profile)文件,启动新的外壳程序,并像使用脚本一样使用命令extractFromLastCommit

extractFromLastCommit() {
    export LAST_GIT_COMMIT_MESSAGE=$(
        git log -1 --pretty=%B |
        grep -o '\[[^][]\]' |
        tr -d '\[\]' |
        head -n1 # only take the first "[…]" – remove this line if you want all
    )
}
,

bash my-bash-script.sh

启动一个新的bash进程,将您的var导出到其中,然后退出并随其使用环境。

source my-bash-script.sh

在当前shell上下文中执行脚本,并会产生所需的效果。

本文链接:https://www.f2er.com/3149657.html

大家都在问