- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
Git for Windows 的 Bash 有一个很实用的功能,如果当前目录处于 Git 仓库中,那么命令行中会显示当前 Git 分支的名称(见下图).
然而原版的 MSYS2 Bash 没有这个功能(见下图),不过我们可以自己动手配置出相同的效果.
打开 MSYS2 的家目录,找到 .bashrc 文件,在其中插入以下代码:
function parse-git-branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
function prompt-sign() {
net session > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "#" # administrator
else
echo "$" # common user
fi
}
export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM \[\e[33m\]\w\[\e[36m\]\$(parse-git-branch)\012\[\e[0m\]$(prompt-sign) "
接着,关闭并重新打开命令行窗口,或者在命令行中执行 source ~/.bashrc 命令,即可看到更改后的效果(见下图).
上述代码通过修改 PS1 这个 shell 环境变量来配置命令提示符,PS 是 prompt string 的缩写。MSYS2 的 PS1 的默认值是 \[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n\$ 。在 PS1 中,以反斜杠开头的字符有特殊含义,例如:
\u
:用户名 \h
:主机名 \w
:当前目录 \n
:换行 \$
:对 root 用户显示 #
,对普通用户显示 $
更多相关内容参见 Controlling the Prompt (Bash Reference Manual) .
PS1 支持用 ANSI 转义序列(ANSI escape code)配置文本的颜色,详见 ANSI escape code - Wikipedia .
了解了 PS1 的相关规则后,自定义命令提示符就不是一件难事了。写一个获取 Git 分支名称的函数 parse-git-branch ,然后用 \$(parse-git-branch) 将分支名称插入 PS1 中即可。请注意双引号字符串中 $(expr) 和 \$(expr) 的区别,如果用的是 $(expr) 语法,则只会在第一次读取变量时对 expr 求值一次,如果用的是 \$(expr) 语法,则每次读取变量时都会对 expr 求值。由于我们希望每次更改目录后都重新读取 Git 分支的名称,因此应使用 \$(expr) 语法.
到了这里你会碰到 MSYS2 的一个 BUG,在 \$(parse-git-branch) 之后使用 \n 换行会报如下的错误:
bash: unexpected EOF while looking for matching `)'
这个 Stack Overflow 回答 给了一种变通的办法,使用 \012 (换行符的 ASCII 码)来代替 \n 即可.
接下来你会碰到 MSYS2 的另一个 BUG。正常来说,当以管理员身份运行 MSYS2 Bash 时会显示一个 # (见下图),当以普通用户身份运行时则显示一个 $ ,这与 Linux Bash 面对 root 用户/普通用户的行为十分相似.
前文提到,可以在 PS1 中使用 \$ 为 root 用户和普通用户显示不同的提示符号。但是不知何故 MSYS2 不支持这个功能,始终显示的是 $ ,所以需要额外写一个函数判断当前是否为管理员身份(即上面的 prompt-sign 函数),我用的是 这个回答 中的方法.
最后此篇关于让MSYS2Bash像GitBash一样显示Git分支名称的文章就讲到这里了,如果你想了解更多关于让MSYS2Bash像GitBash一样显示Git分支名称的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
自从我在电脑上安装了GitBash,提示就一直很迟钝。我想我已经将罪魁祸首归结为命令 __git_ps1。 此命令的时间以及输出如下: $ time __git_ps1 + __git_ps1 + l
Hemang Joshi@SOLO MINGW64 ~ (add-hemang-joshi) 您好,我是 GitHub 的新手,我想知道这是什么,为什么每次都显示它,我该如何删除它? (add-hem
我正在尝试使用 gitbash 将项目推送到 Github。我已经对项目进行了一些更改,但不是在我的本地计算机上,而是直接在 Github 网站上。现在我正尝试从我的计算机推送项目更新,但我收到错误消
这不是一个大问题,但它困扰着我。我已经将它安装在 Program Files (x86) 中,已经找到了许多对我不起作用的旧解决方案。我无法将其安装在其他位置。我试图将 ico 更改为位于没有空格的路
GitBash 突然停止正常工作。我尝试卸载并重新安装但没有成功。 git 命令似乎执行了,但在控制台中没有显示任何内容。例如,我可以拉、推、初始化并且它可以工作,但命令行上没有任何显示。 git -
我刚进入一门介绍 Python 的类(class),所以我在我的 Windows 笔记本电脑上下载了 GitBash 和 Andaconda。我在 GitBash 上导航到我的 python 文件并尝
我正在尝试在我的 Node 服务器中使用npm install debug。 var debugModule = require('debug'); var debugMainApp = debugM
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
我试图在 GitBash (Windows 7) 中设置 virtualenvwrapper。我写下一行: 1 $ 导出 WORKON_HOME=$HOME/.virtualenvs 2 $ expo
我正在 Windows 上使用 git bash,并且正在尝试访问我的桌面。当我输入命令时cd ~/桌面我收到以下消息: bash: cd:/h//desktop: 没有这样的文件或目录 我做错了什么
您好,我正在使用 GitBash 为我的项目创建一个目录,然后从 GitHub.com/...但该目录从未出现在 Windows 资源管理器中。 详细说明: 我使用 mkdir TestForStac
我正在关注 this guide ,我已经到了需要创建 .bashrc 文件的部分,当我重新启动 GitBash 时它似乎没有执行。我已经尝试了一些事情,包括 this SO question 上的答
我刚刚安装了 ConEmu 终端,我无法将它配置为以 gitbash 作为我的终端而不是 Windows CMD 启动,我希望它以 ex: /c/Users/Kalin/启动驱动器 我尝试将值随机传递
我在 Win7 上的 .bashrc 文件中有一个函数,如下所示: function gi() { npm install --save-dev grunt-"$@" } 它允许我输入“gi
我制作了我的 gitrepository 并提交了它。 插入了一个 java 文件并想编译它,但它给了我这个: Bernard@BERNARD-PC /c/users/bernard/desktop/
例如我跑 docker run --rm --name mycontainer -p 8080:8080 myrepo/myimage 然后我看到我的应用程序的输出,一切正常。然后我按 Ctrl+C
我的问题的解决方案可能很简单,但由于我是命令行和 npm 的初学者,所以很难自己解决它,希望你知道解决方案: 我克隆了一个存储库,然后在命令行中启动了 npm。当我输入命令“start npm”后,它
我在 GitBash 中运行一个类似于下面的函数: myfunction(){ build runscript launch } runscript 函数需要几分钟才能运行,最后需要输入才
我正在尝试使用 taskkill 命令在 Windows 10 上的 Git Bash 上终止进程。但是,我收到以下错误: $ taskkill /pid 13588 ERROR: Invalid a
我正在使用共享主机,并且想在服务器中安装node.js,请建议我安装时需要使用的命令。 我尝试过以下命令 git clone https://github.com/ry/node.git cd nod
我是一名优秀的程序员,十分优秀!