Bash

如果 $HOME 包含空格,則不會在 WSL 上讀取 .bashrc

  • September 18, 2019

我最近:在 /etc/passwd 中為使用者指定了一個主目錄路徑,其中包含空格?但是現在.bashrc當我打開 Ubuntu 16.04 LTS WSL 視窗時,我的來源不正確,所以我必須source手動進行…它適用於source ~/.bashrc,但奇怪的是不適用於source $HOME/.bashrc,但奇怪的是適用於source "$HOME"/.bashrc.

所以傑夫在上一個問題上認為,也許問題是其他東西在沒有引號的情況下採購它。

事實上,一個類似的問題導致我fork git hub 項目,其中發生了類似的錯誤;我認為這是因為我在 Windows 上使用了 mingw64 / git-bash,但這根本不是問題,因為現在它發生在 WSL 中……至少我認為是這樣……

奇怪地不適用於source $HOME/.bashrc

這很正常:它不應該工作source "$HOME/.bashrc"從您的主目錄中的文件執行指令.bashrc,但source $HOME/.bashrc採用 的路徑.bashrc,將其拆分為空格,並從名稱為第一個空格的部分的文件中執行指令,並將其他部分用作位置參數(可"$@"從程式碼中獲得中.bashrc)。(假設 的值中沒有萬用字元HOME。)

通常沒有什麼會執行類似的命令source ~/.bashrc: bash 在啟動時已經這樣做了。一個可能的解釋是 WSL 視窗執行一個登錄 shell。當 bash 是登錄 shell 時,它不載入.bashrc,而是載入.bash_profile.profile代替。大多數人通過.bashrc. .bash_profile檢查你的.bash_profile(或者如果你沒有你的.profile,他們可能有錯誤的source $HOME/.bashrc. $HOME/.bashrc代替正確的方法之一(source ~/.bashrc或者如果你喜歡冗長source "$HOME/.bashrc",或者其中任何一個用.代替source)。

引用自:https://unix.stackexchange.com/questions/542499