我正在使用一个函数来动态生成PS1
. 有几个语句检查是否node
和package.json
存在,以及如果git
和.git
文件夹存在以显示节点版本或 git 分支。如果不存在,则只输出 User$。
问题是当用户进入另一个不满足任何条件的文件夹时,提示没有更新。就像条件被缓存或 smth
function displayPS1() {
MESSAGE="";
GRAY_BACK="\[\e[100;97m\]";
GREEN_BACK="\[\e[100;42m\]";
GREEN_FORE="\[\e[32;1m\]";
CYAN_BACK="\[\e[100;46m\]";
CYAN_FORE="\[\e[36;1m\]";
RESET="\[\e[0m\]";
if hash node 2>/dev/null && [ -e package.json ]; then
NODE='$(node -v | sed "s/\(v[0-9]*\)\(\.[0-9]*\.[0-9]*\)/\1/g")';
MESSAGE="${GRAY_BACK} node ${GREEN_BACK} $NODE ${RESET} User${GREEN_FORE}$ ${RESET}";
elif hash git 2>/dev/null && [ -d .git ]; then
BRANCH='$(cat .git/HEAD | sed "s/ref:[[:space:]]refs\/heads\///")';
MESSAGE="${GRAY_BACK} git ${CYAN_BACK} $BRANCH ${RESET} User${CYAN_FORE}$ ${RESET}";
else
MESSAGE="User${CYAN_FORE}$ ${RESET}";
fi
echo "$MESSAGE";
}
export PS1=$(displayPS1);
Run Code Online (Sandbox Code Playgroud)
ilk*_*chu 13
export PS1=$(displayPS1);
Run Code Online (Sandbox Code Playgroud)
这将运行displayPS1
,以及一次中的if
语句,将结果分配给提示。之后将不再处理条件。
相反,将函数调用放入 中PROMPT_COMMAND
,这样每次打印提示时都会调用它。所以要么
PROMPT_COMMAND='PS1=$(displayPS1)'
Run Code Online (Sandbox Code Playgroud)
或者更确切地说
PROMPT_COMMAND=setPS1
Run Code Online (Sandbox Code Playgroud)
并制作setPS1
一个设置PS1
自身的函数。(删除命令替换可以在每次更改提示时从子 shell 调用中保存一个分支。)