这应该很简单。最近我注意到,在Mac上在终端中输入“bash”时,会显示以下内容:
Jays-MacBook-Pro: ~ $ bash
bash: parse_git_branch: command not found
之前没有出现这种情况,有人能解释一下为什么会出现这种情况以及如何解决吗?
这应该很简单。最近我注意到,在Mac上在终端中输入“bash”时,会显示以下内容:
Jays-MacBook-Pro: ~ $ bash
bash: parse_git_branch: command not found
很可能您已配置了BASH以运行parse_git_branch并将结果作为PS1的一部分打印出来。您可以通过以下方式进行检查:"echo $PS1"和"echo $PROMPT_COMMAND"。
然而,parse_git_branch不是bash的内置函数。下面是我如何配置我的PS1。您可能希望将我的git_branch_4_ps1复制为您的parse_git_branch。
PS1='\n' # begin with a newline
PS1=$PS1'\[\e[38;5;101m\]\! \t ' # time and command history number
PS1=$PS1'\[\e[38;5;106m\]\u@\h ' # user@host
PS1=$PS1'\[\e[7;35m\]${MY_WARN}\[\e[0m\] ' # warning message if there is any
PS1=$PS1'\[\e[38;5;10m\]${MY_EXTRA} ' # extra info if there is any
PS1=$PS1'\[\e[0;36m\]$(git_branch_4_ps1) ' # git_branch_4_ps1 defined below
PS1=$PS1'\[\e[38;5;33m\]\w' # working directory
PS1=$PS1'\n\[\e[32m\]\$ ' # "$"/"#" sign on a new line
PS1=$PS1'\[\e[0m\]' # restore to default color
function git_branch_4_ps1 { # get git branch of pwd
local branch="$(git branch 2>/dev/null | grep "\*" | colrm 1 2)"
if [ -n "$branch" ]; then
echo "(git: $branch)"
fi
}
parse_git_branch
被定义在~/.bash_profile
中,当你打开一个非登录shell(例如通过运行bash
打开)时,它将不会被加载。
登录shell和非登录shell之间的区别在这里描述:登录Shell和非登录Shell之间的区别?对于我们的目的,主要区别是登录Shell(例如你第一次打开终端时)在启动时自动引用~/.bash_profile
,而非登录Shell(例如在终端内运行bash
)则不会。~/.bash_profile
即可:
user@host:~ $ bash
bash: parse_git_branch: command not found
user@host:~ $ source .bash_profile
或者,您可以将该函数放置在~/.bashrc
中,这样非登录shell会自动调用它(如前面链接所述)。
与其拥有
parse_git_branch
如果您只想调用PS1定义,可以使用以下命令:
parse_git_branch 2>/dev/null
将stderr
发送到/dev/null
中。这将消除您不想看到的错误。
您是否已经导出了 $PS1 变量?您可以通过运行以下命令进行检查:
printenv
export -n PS1
在此之后,您将能够轻松运行sudo或sudo su命令,无需遇到任何问题。
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}