为什么我的函数没有在 PS1 中执行?
why my function does not execute in PS1?
get_git_branch(){
local branch__=
git branch &> /dev/null
if [ $? -eq 0 ]; then
branch__=`git branch --no-color | sed -ne 's/^\* \(.*\)$//1p' | tr a-z A-Z`
else
branch__="NORMAL"
fi
echo -n $branch__
}
exit_status(){
local smile__=
if [ $? -eq 0 ]; then
smile__='(*´▽`*)'
else
smile__='(╥﹏╥)'
fi
echo -n $smile__
}
export PS1='[\w]\d\t$\n\u->(`get_git_branch`)`exit_status`:'
这是我的 bashrc 中的 PS1 设置,我想在我的终端中检查 git 分支和退出状态,get_git_branch 每次 PS1 刷新时都有效,但是exit_status 不是,乳清 exit_status 没有执行?
绝对执行。然而,$?
被它之前的 运行 的其他代码更改了——比如 get_git_branch
.
这里的最佳做法是不要在 PS1 中想要详细流程控制的地方嵌入代码,而是使用 PROMPT_COMMAND
.
get_git_branch(){
local branch
if branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null); then
printf '%s\n' "${branch^^}" # if on bash 3.2, you may need to use tr instead
else
echo "NORMAL"
fi
}
exit_status(){
if (( ${1:-$?} == 0 )); then
printf '%s' '(*´▽`*)'
else
printf '%s' '(╥﹏╥)'
fi
}
build_prompt() {
last_exit_status_=$?
PS1='[\w]\d\t$\n\u->($(get_git_branch))$(exit_status "$last_exit_status_"):'
}
PROMPT_COMMAND=build_prompt
get_git_branch(){
local branch__=
git branch &> /dev/null
if [ $? -eq 0 ]; then
branch__=`git branch --no-color | sed -ne 's/^\* \(.*\)$//1p' | tr a-z A-Z`
else
branch__="NORMAL"
fi
echo -n $branch__
}
exit_status(){
local smile__=
if [ $? -eq 0 ]; then
smile__='(*´▽`*)'
else
smile__='(╥﹏╥)'
fi
echo -n $smile__
}
export PS1='[\w]\d\t$\n\u->(`get_git_branch`)`exit_status`:'
这是我的 bashrc 中的 PS1 设置,我想在我的终端中检查 git 分支和退出状态,get_git_branch 每次 PS1 刷新时都有效,但是exit_status 不是,乳清 exit_status 没有执行?
绝对执行。然而,$?
被它之前的 运行 的其他代码更改了——比如 get_git_branch
.
这里的最佳做法是不要在 PS1 中想要详细流程控制的地方嵌入代码,而是使用 PROMPT_COMMAND
.
get_git_branch(){
local branch
if branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null); then
printf '%s\n' "${branch^^}" # if on bash 3.2, you may need to use tr instead
else
echo "NORMAL"
fi
}
exit_status(){
if (( ${1:-$?} == 0 )); then
printf '%s' '(*´▽`*)'
else
printf '%s' '(╥﹏╥)'
fi
}
build_prompt() {
last_exit_status_=$?
PS1='[\w]\d\t$\n\u->($(get_git_branch))$(exit_status "$last_exit_status_"):'
}
PROMPT_COMMAND=build_prompt