不在git仓库中时无法抑制git分支错误

3
我想让命令提示符在我的Prompt String 1(PS1)中显示当前分支。该命令适用于git存储库,但当不在git存储库中时,我会得到正确的错误消息:fatal: Not a git repository (or any of the parent directories): .git
否则,每次切换目录并且不在git存储库中时,终端都会打印出这个错误消息,所以我想要抑制这个错误消息。
我研究了在将错误输出发送到null设备/dev/null来抑制终端输出,但错误消息仍然会在我的终端中打印。
以下是我用于提取当前分支的命令:git branch 2>/dev/null | grep '*' | cut -d ' ' -f2

你是如何在~/.bashrc中设置PS1的?请在问题中添加细节。 - LMC
我正在我的.bash_profile中进行设置。 - Govind Rai
1个回答

4

确保在$()的结构中转义$,这样每次生成提示时都会重新评估它,而不是仅在设置PS1变量时评估它。

以下是我在实践中的示例:

# Set PS1
$ PS1="\$(git branch 2>/dev/null | grep '*' | cut -d ' ' -f 2) $ "

# Currently in directory that is not a Git repository, change into one.
 $ cd dotfiles/

# Git branch is then displayed in the prompt, leave the directory.
master $ cd ..

# No git branch displayed, change back into it for good measure.
 $ cd dotfiles/

# Branch is displayed again.
master $

谢谢。我不知道通过转义美元符号来进行变量检索时进行新评估的功能是否有特定的术语在Bash中。奇怪的是,今天早上启动我的电脑并在终端上运行相同的命令不再抛出错误,因此将重定向到空设备似乎按预期工作。或者我不知道发生了什么 :P - Govind Rai
我不知道它的名称。这只是关于字符串何时以及如何被处理的推理问题。例如,如果您想要显示一个字面上的"$(...)",那么您也必须转义转义字符\\\$(...)。这样,当shell呈现提示时,它会遇到\$(...) - chuckx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接