如何根据当前工作目录修改Bash的PS1提示符颜色?
如何让Bash提示符PS1根据当前目录显示不同颜色?
嘿,这个需求我之前也折腾过,其实通过自定义PS1的动态判断就能轻松实现!下面给你两种靠谱的方案,分别适合不同的场景:
方案一:简单条件判断(适合少量目录)
这种方式逻辑直白,适合只需要区分两三个目录的情况。首先你得知道Bash里的颜色控制代码:
- 绿色:
\[\033[0;32m\] - 蓝色:
\[\033[0;34m\] - 重置颜色:
\[\033[0m\](一定要加这个,不然后续输入的文本也会跟着变色)
直接把下面的代码加到你的~/.bashrc(Mac用户是~/.bash_profile)文件末尾:
# 定义函数来动态设置PS1颜色 function set_ps1() { local dir_color # 判断当前目录是否匹配目标路径(子目录也会生效) if [[ "$PWD" == "/my-app-1"* ]]; then dir_color="\[\033[0;32m\]" # 匹配/my-app-1及其子目录时用绿色 elif [[ "$PWD" == "/my-app-2"* ]]; then dir_color="\[\033[0;34m\]" # 匹配/my-app-2及其子目录时用蓝色 else dir_color="\[\033[0;37m\]" # 其他目录用默认浅灰色 fi # 构建PS1格式,这里可以根据自己的习惯调整(比如加用户名、主机名) PS1="${dir_color}\w\[\033[0m\] \$ " } # 每次显示提示符前执行上面的函数 PROMPT_COMMAND="set_ps1"
修改完后执行source ~/.bashrc,就能立即看到效果啦!
方案二:Case语句(适合多目录扩展)
如果以后要加更多目录的颜色区分,用case语句会更清晰,扩展性更好:
function set_ps1() { local dir_color case "$PWD" in /my-app-1*) dir_color="\[\033[0;32m\]" ;; /my-app-2*) dir_color="\[\033[0;34m\]" ;; /my-app-3*) dir_color="\[\033[0;31m\]" ;; # 新增红色目录 /my-app-4*) dir_color="\[\033[0;35m\]" ;; # 新增紫色目录 *) dir_color="\[\033[0;37m\]" ;; # 默认颜色 esac # 这里示例加入了用户名和主机名,你可以按需修改 PS1="\u@\h ${dir_color}\w\[\033[0m\] \$ " } PROMPT_COMMAND="set_ps1"
额外小提示
- 颜色代码可以自定义:比如加粗绿色是
\[\033[1;32m\],绿色背景是\[\033[42m\],你可以根据喜好调整 - 如果用的是Zsh,逻辑基本一致,只是把配置文件换成
~/.zshrc,PS1的语法略有不同,调整一下就能用 - 测试的时候可以用
cd /my-app-1和cd /my-app-2来回切换,看看颜色是否正常变化
内容的提问来源于stack exchange,提问作者Nathan Friend
相关产品推荐
相关产品推荐

