Shell

在 zsh 和 bash 之間共享別名和 PATH 設置

  • November 18, 2015

我通常使用的外殼是zsh. 我有幾個別名可以在某些程序中啟用顏色,例如lsgrep。我還設置了自定義路徑,以便可以在非標準位置(例如 in ~/bin/)執行程序。

不會將 root 的 shell 更改zsh,但我想分享這些設置,以便 root 也可以擁有它。我發現那zsh不是採購/etc/profile。我可以在 中獲取它/etc/zsh/zprofile,但我想要一些其他更“正確”的方式。

我會創建一個文件/etc/commonprofile並在/etc/profile/etc/zsh/zprofile. 這使您有機會共享通用設置,並且仍然分別使用各自bashzsh特定設置和語法。/etc/profile``zprofile

Zsh 有一個 sh 兼容模式,可以讓它執行 POSIX sh 程式碼和一些 bash 擴展。只要您不使用 zsh 所沒有的 bash 功能(使用相同的語法),您就可以擁有由兩個 shell 提供的相同文件。使用emulate內置將zsh置於兼容模式;使用該-L選項,仿真對於封閉函式(不是封閉源腳本)是本地的。

source_sh () {
 emulate -LR sh
 . "$@"
}

對於環境變數之類的東西,您可以使用source_sh /etc/profilein/etc/zprofilesource_sh ~/.profilein ~/.zprofile,因為配置文件不太可能使用特定於 bash 的功能。

對於別名和函式定義之類的東西,由於 shell rc 文件可能包含很多無法共享的東西(提示、鍵綁定、完成設置……),請使用類似的文件~/.sh_aliases來源~/.bashrcsource_sh‘d在~/.zshrc.

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