解决bash终端的路径名称乱码问题

发布于:2025-07-13 ⋅ 阅读:(18) ⋅ 点赞:(0)

解决bash终端的路径名称乱码

默认打开了zsh,当我输入bash后,就出现了乱码

(context_rag) [23fanyao@head1]~/mycode-thesis% bash
(context_rag) [%n@%m]%~%#

在这里插入图片描述

乱码原因排查

我遇到了终端乱码问题,需要检查当前的终端环境和编码设置,下面是我的检查过程

  1. 终端输入:locale

系统的locale设置看起来正常,都是UTF-8编码。

  1. 再检查一下终端的字符编码设置和环境变量。

mycode-thesis 终端

echo $TERM && echo $LANG && echo $LC_ALL 

在这里插入图片描述

环境变量看起来正常。

  1. 检查一下Python的默认编码设置,因为可能在运行Python脚本时遇到乱码问题。在终端中输入:
python3 -c "import sys; print('Python version:', sys.version); print('Default encoding:', sys.getdefaultencoding()); print('File system encoding:', sys.getfilesystemencoding()); print('Stdout encoding:', sys.stdout.encoding)"

在这里插入图片描述

Python编码设置也是正常的。

  1. 检查一下的shell配置文件,看看是否有特殊的编码设置或别名导致乱码。
echo $SHELL && cat ~/.bashrc | grep -i 'lang\|locale\|encoding' || echo 'No encoding settings found in .bashrc'

在这里插入图片描述

  1. 检查一下当前的终端提示符设置,因为我注意到提到的乱码可能与PS1提示符有关。(查询结果如上图)
echo "Current PS1: $PS1"

最终!!!我发现了乱码问题的原因:原来是终端提示符(PS1)使用了zsh风格的变量格式(%n、%m、%~、%#),但当前使用的是bash shell,这导致这些变量无法正确解析。

解决方案(错误!这是踩过的坑):

  1. 临时修复 (当前会话有效):
export PS1='(context_rag) [\u@\h]\w\$ '
  1. 永久修复 (添加到~/.bashrc文件):
echo 'export PS1="(context_rag) [\u@\h]\w\$ "' >> ~/.bashrc
source ~/.bashrc

成功解决:

在这里插入图片描述

解决方案(正确):

(这里我之前犯错了,不小心执行了下面的命令把echo 'export PS1="(context_rag)[\u@\h]\w\$ "' >> ~/.bashrc 虚拟环境(固定写上去了),所以上图会看到带有虚拟环境的标识,但这是错误的,会误导我们,因为目前所在环境是base,我们不能写死在PS1显示中。应该写为默认环境变量,意思到这个问题,所以我更正了,又重新设置一遍,)

正确重新设置一遍如下:

或者不喜欢这样的配置,我喜欢把当前路径加到[ ] 的里面, 用空格隔开

echo 'export PS1="(\$CONDA_DEFAULT_ENV)[\u@\h \w]\$ "' >> ~/.bashrc
source ~/.bashrc

这里,我的默认环境变量是:$CONDA_DEFAULT_ENV = base

显示:

在这里插入图片描述
在这里插入图片描述

知其然,也要知其所以然

**学习积累,不仅要知道这样做设置正确,还要知道为什么这样做。**所以我查阅了一些参数含义,举例子让自己理解。附在下面把。

解释 PS1="[\u@\h \w]\$ " 的含义

参数 含义
\u 当前用户名(user)
\h 主机名(host)的简写(第一个点之前的部分)
\w 当前工作目录的完整路径(绝对路径,但家目录会被替换成~
\$ 如果是普通用户显示$,如果是 root 显示#

📌 关于 \w 的详细解释

\w 表示的是 当前工作目录的完整路径(即绝对路径) ,但它会做如下简化:

  • 用户的主目录(如 /home/user)会被替换为 ~
  • 其他路径则显示完整的绝对路径,例如:/home/user/documents/project

🧪 示例说明

假设你当前的登录用户名是 alice,主机名是 mybox,你现在所在的目录是:/home/alice/projects/myapp

那么你的命令行提示符就会变成:[alice@mybox ~/projects/myapp]$

再举几个例子:

当前路径: 命令行显示的 \w
/home/alice ~
/home/alice/documents ~/documents
/etc/nginx /etc/nginx
/var/www/html /var/www/html

网站公告

今日签到

点亮在社区的每一天
去签到