天天看點

Cygwin如何更改HOME目錄(MSYS2和Cygwin ZSH沖突)

由于使用者變量中的HOME由于需要使用Cadence的原因被迫改到E:\Cadence\SPB_Data下,MSYS2使用的ZSH的配置檔案都自動放在這一目錄下,然而想為Cygwin也配置ZSH發現産生亂碼,這并不是由于字型或者編碼問題導緻的,其原因是MSYS2和Cygwin共用HOME目錄下的.zshrc檔案,而.zshrc檔案中兩個系統使用的路徑表示不一樣,Cygwin需要在盤符前面加"/cygdrive",如在MSYS2使用的.zshrc中,ZSH的PATH配置語句為:

export ZSH="/e/Cadence/SPB_Data/.oh-my-zsh"           

而Cygwin中則應為:

export ZSH="/cygdrive/c/Users/<userename>/.oh-my-zsh"           

解決這個問題隻能通過更改Cygwin的HOME目錄的方式來解決(而不隻是啟動目錄設定)。

首先,Cygwin現在已有zsh包可通過setup程式安裝,不要再使用apt-cyg,它已經過時,經測驗安裝zsh會報錯。

經過測驗,https://superuser.com/questions/585331/is-it-possible-to-have-cygwin-ignore-the-windows-home-environment-variable上提出的在/etc/profile中添加

HOME=$(eval echo "~$USER")           

的方法并不可行。你可以更改Cygwin的快捷方式為Cygwin.bat啟動,在Cygwin.bat中可以随意更改HOME等設定,但是這樣啟動使用的是Windows指令提示符的Shell,并非Cygwin自帶的mintty shell,這樣就會出現亂碼。另外經檢驗,https://stackoverflow.com/questions/1494658/how-can-i-change-my-cygwin-home-folder-after-installation中提出的在/etc/nsswitch.conf中将db_home的注釋去掉并改為/%H、/%H/cygwin、windows、/home/%U等等統統沒用,而且試圖執行mkpasswd、mkgroup語句或https://superuser.com/questions/289444/how-do-i-change-my-home-folder-in-cygwin中提出的更改/etc/passwd檔案等方法全部無效,而經http://mintty.github.io/mintty.1.html查mintty.exe的啟動參數也無計可施。

正确方法是:

  1. 在C:\Users\<username>中另安裝一個oh-my-zsh,可在該目錄下執行指令(用Cygwin執行):
    sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"           
    sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"           
    等。
  2. 編輯.zshrc檔案,确定語句:
    export ZSH="/cygdrive/c/Users/<userename>/.oh-my-zsh"           
    并将ZSH_THEME更改為你喜歡的主題,我使用的是agnoster的變種zys主題。
  3. 在/etc/bash.bashrc中添加:
    HOME="C:\Users\<username>"
    PATH="/usr/local/bin:/usr/bin"
    exec zsh           
    其中第一句是真正地設定了Cygwin的HOME目錄,第二句是定義環境變量PATH,如沒有這一句則很多指令無法執行,第三句是自動啟動ZSH。
  4. 在/etc/profile中添加:
    HOME="C:\Users\<username>"           
    這一句是設定了啟動目錄為~,其中~為C:\Users\<username>。
  5. 确認Cygwin快捷方式的目标為:
    D:\Program_Files\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico -           
    其中目錄請按照自己的安裝目錄修改,最後的-也可改為-~,都保證啟動目錄為~,但是如果沒有則啟動目錄變成快捷方式所在的目錄。經驗證,https://superuser.com/questions/940529/how-to-change-the-default-shell-in-cygwin/1134672#1134672和https://medium.com/@alllexsm/how-to-install-z-shell-zsh-on-cygwin-dd9ee380d783中所提出的自動啟動zsh的參數會導緻閃退,原因不明。

另外如果想為Windows Terminal配置Cygwin可在profiles.json的"profiles"裡的"list"裡添加:

{
    "guid": "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
    "name": "Cygwin64",
    "commandline": "D:\\Program_Files\\cygwin64\\bin\\bash.exe",
    "icon": "D:\\Program_Files\\cygwin64\\Cygwin.ico"
}           

其中GUID可使用PowerShell指令

New-GUID           

生成一個,其他個性化設定在此就不提供了,發現Windows Terminal可以完美運作Cygwin(Windows Terminal有自己的預設啟動目錄):

Cygwin如何更改HOME目錄(MSYS2和Cygwin ZSH沖突)