解決bash終端的路徑名稱亂碼
默認打開了zsh,當我輸入bash后,就出現了亂碼
(context_rag) [23fanyao@head1]~/mycode-thesis% bash
(context_rag) [%n@%m]%~%#
亂碼原因排查
我遇到了終端亂碼問題,需要檢查當前的終端環境和編碼設置,下面是我的檢查過程
- 終端輸入:locale
系統的locale設置看起來正常,都是UTF-8編碼。
- 再檢查一下終端的字符編碼設置和環境變量。
mycode-thesis 終端
echo $TERM && echo $LANG && echo $LC_ALL
環境變量看起來正常。
- 檢查一下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編碼設置也是正常的。
- 檢查一下的shell配置文件,看看是否有特殊的編碼設置或別名導致亂碼。
echo $SHELL && cat ~/.bashrc | grep -i 'lang\|locale\|encoding' || echo 'No encoding settings found in .bashrc'
- 檢查一下當前的終端提示符設置,因為我注意到提到的亂碼可能與PS1提示符有關。(查詢結果如上圖)
echo "Current PS1: $PS1"
最終!!!我發現了亂碼問題的原因:原來是終端提示符(PS1)使用了zsh風格的變量格式(%n、%m、%~、%#),但當前使用的是bash shell,這導致這些變量無法正確解析。
解決方案(錯誤!這是踩過的坑):
- 臨時修復 (當前會話有效):
export PS1='(context_rag) [\u@\h]\w\$ '
- 永久修復 (添加到~/.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 |