Bash环境变量不更新

时间:2012-10-17 14:47:39

标签: linux git bash shell

我在我的仓库中使用git post-checkout钩子将当前分支转换为变量,然后我想在PHP等其他地方使用它。

以下是我的结账后脚本:

#!/bin/bash
echo $GITBRANCH
GITBRANCH=`git symbolic-ref HEAD | cut -d/ -f3-`
echo $GITBRANCH
export $GITBRANCH

然而它没有更新。例如:

>git checkout master
Switched to branch 'master'
develop
master
>echo $GITBRANCH
develop

自己运行GITBRANCH=git symbolic-ref HEAD | cut -d/ -f3-命令将生成当前分支名称。

为什么钩子不会全局更新$ GITBRANCH变量?

4 个答案:

答案 0 :(得分:3)

当您在脚本中设置变量时,它只能在脚本运行的shell中可用。一旦进程终止,您设置的变量就会永远消失!

如果您希望变量在任何地方都可用,那么.profile.bashrc可能会更好。

答案 1 :(得分:0)

运行脚本,前面有一个点。

. script

答案 2 :(得分:0)

两步过程应该达到你想要的效果:

1)在结帐后脚本中,创建一个包含要导出的变量的临时文件。像

这样的东西
#!/bin/bash
GITBRANCH=`git symbolic-ref HEAD | cut -d/ -f3-`
echo "GITBRANCH=$GITBRANCH" > /tmp/new-branch

2)创建一个bash函数作为git的包装器,并使用它来源    结帐后的临时文件:

# Put this in .bashrc
git () {
    command git "$@"
    if [[ $1 = "checkout" ]]; then
        . /tmp/new-branch
    fi
}

$ git checkout master
Switched to branch 'master'
$ echo $GITBRANCH
master

答案 3 :(得分:-1)

尝试:

export GITBRANCH

即没有美元符号。

相关问题