簡(jiǎn)介
默認(rèn)情況下,您的 Mac 使用 zsh 或 bash 作為登錄 Shell 和交互式 Shell 的命令行解釋器:
- bash 是 macOS Mojave 及更低版本中的默認(rèn) Shell。
- zsh 從 macOS Catalina 版開始,您的 Mac 將使用 zsh 作為默認(rèn)登錄 Shell 和交互式 Shell。
與 Bourne Shell (sh) 高度兼容,并且與 bash 基本兼容,但存在一些差別。要進(jìn)一步了解 zsh 及其全面的命令行完成系統(tǒng),請(qǐng)?jiān)凇敖K端”中輸入man zsh。
如何查看自己使用的是哪一個(gè)shell
echo $SHELL
查看系統(tǒng)安裝了哪些shell
cat /etc/shells
運(yùn)行中的Bash有兩種模式: login shell 和 non-login shell
1、login shell(登錄Shell):就是需要輸入用戶名及密碼登錄的shell,如開機(jī)shell登錄、ssh登錄、su - username(從root切換到其他用戶時(shí)無需密碼)。
2、non-login shell:無需輸入密碼,如bash、su username、圖形界面打開bash。
bashrc用于交互式non-login shell,而profile用于交互式login shell。系統(tǒng)中存在許多bashrc和profile文件
bash Shell
登錄Shell
/etc/profile(系統(tǒng)級(jí)(全局)配置文件):此文件為系統(tǒng)的所有登錄用戶設(shè)置環(huán)境信息,當(dāng)用戶第一次登錄時(shí),該文件被執(zhí)行,并從/etc/profile.d目錄的配置文件中搜集shell的設(shè)置。~/.bash_profile:每個(gè)用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時(shí),該文件僅僅執(zhí)行一次!默認(rèn)情況下,他設(shè)置一些環(huán)境變量,執(zhí)行用戶的
.bashrc文件。
此文件類似于/etc/profile,也是需要需要重啟才會(huì)生效,/etc/profile對(duì)所有用戶生效,~/.bash_profile只對(duì)當(dāng)前用戶生效!~/.profile:(針對(duì)個(gè)人)若bash是以login方式執(zhí)行時(shí),讀取~/.bash_profile,若它不存在,則讀取~/.bash_login,若前兩者不存在,讀取~/.profile。另外,圖形模式登錄時(shí),此文件將被讀取,即使存在~/.bash_profile和~/.bash_login。
~/.zshrc:無論登錄和非登錄用戶都可以讀取
非登錄Shell
/etc/bashrc(系統(tǒng)級(jí)(全局)配置文件):為每一個(gè)運(yùn)行bash shell的用戶執(zhí)行此文件, 當(dāng)bash shell被打開時(shí)或在用戶主目錄下找不到.bashrc時(shí),就會(huì)讀取這該文件。~/.bashrc:該文件包含專用于你的bash shell的bash信息,當(dāng)?shù)卿洉r(shí)以及每次打開新的shell時(shí),該文件被讀取.(每個(gè)用戶都有一個(gè).bashrc文件,在用戶目錄下)。
此文件類似于/etc/bashrc,不需要重啟生效,重新打開一個(gè)bash即可生效,/etc/bashrc對(duì)所有用戶新打開的bash都生效,但~/.bashrc只對(duì)當(dāng)前用戶新打開的bash生效。但一般 來說都會(huì)在~/.bash_profile里調(diào)用~/.bashrc腳本以便統(tǒng)一配置用戶環(huán)境。
~/.bashrc等中設(shè)定的變量(局部)只能繼承/etc/profile中的變量,他們是"父子"關(guān)系.~/.bash_logout:當(dāng)每次退出系統(tǒng)(退出bash shell)時(shí),執(zhí)行該文件。~/.bash_history:是bash shell的歷史記錄文件,里面記錄了你在bash shell中輸入的所有命令??赏ㄟ^HISSIZE環(huán)境變量設(shè)置在歷史記錄文件里保存記錄的條數(shù)。alias l = ‘ls -l’是設(shè)置別名的語句,把它放在這些配置文檔中就可使我們能用簡(jiǎn)單的’l’命令,代替’ls -l’命令。
另外:不要輕易修改 /etc/environment 文件。
zsh Shell
從 macOS Catalina 版開始,您的 Mac 將使用 zsh 作為默認(rèn)登錄 Shell 和交互式 Shell。
~/.zprofile的作用與~/.bash_profile相同,并且在登錄時(shí)運(yùn)行(包括通過 SSH 運(yùn)行)
~/.zshrc的作用與~/.bashrc相同,并針對(duì)每個(gè)新的“終端”會(huì)話運(yùn)行
-
說明: 如何切換到 zsh 描述文件和提示符
如果您正在使用 bash 描述文件(例如,為了設(shè)置環(huán)境變量、別名或路徑變量),則您應(yīng)改為使用作用與它相同的 zsh 描述文件。
1、如何更改默認(rèn) Shell
無論您的用戶帳戶是配置為使用 zsh(推薦)、bash 還是其他 Shell,您都可以從“用戶與群組”偏好設(shè)置或命令行中更改默認(rèn) Shell。
從“用戶與群組”偏好設(shè)置中更改
選取蘋果菜單 ? >“系統(tǒng)偏好設(shè)置”,然后點(diǎn)按“用戶與群組”。
點(diǎn)按鎖形圖標(biāo) ,然后輸入您的帳戶名稱和密碼。
在左側(cè)的用戶列表中,按住 Control 鍵點(diǎn)按您的用戶名,然后選取“高級(jí)選項(xiàng)”。
從“登錄 Shell”菜單中選取一個(gè) Shell,然后點(diǎn)按“好”以存儲(chǔ)更改。從命令行中更改
在“終端”中,輸入$ chsh -s path,其中的 path 是 /etc/shells 中列出的某個(gè) Shell 路徑,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh,比如:$ chsh -s /bin/zsh或$ chsh -s /bin/bash。
如何在不更改默認(rèn) Shell 的情況下使用其他 Shell
如果您不希望“終端”在新的“終端”窗口和標(biāo)簽頁中使用默認(rèn)的登錄 Shell,請(qǐng)按照以下步驟操作:
打開“終端”,然后選取“終端”>“偏好設(shè)置”。
從“通用”面板中,選擇“命令(完整的路徑)”。
在提供的欄位中,輸入 /etc/shells 中列出的某個(gè) Shell 路徑,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh。
2、在配置文件方面
bash讀取的配置文件:
open -e ~/.bash_profile
// vim ~/.bash_profile
// sudo vim ~/.bash_profile
zsh讀取的配置文件:
open -e ~/.zshrc
// vim ~/.zshrc
// sudo vim ~/.zshrc
沒有電腦不存在,則新建一個(gè)配置文件:
touch .bash_profile //在用戶(~)目錄下
// touch ~/.bash_profile //任何目錄下都可以用這個(gè)命令
當(dāng)從bash切換為zsh時(shí),如果不想重新配置一遍.zshrc文件,可以__在.zshrc文件中加上source ~/.bash_profile,從而直接從.bash_profile文件讀取配置。
使環(huán)境變量生效
source ~/.zprofile
查看變量是否生效
echo $PATH
重啟所有終端
macOS下打開的shell是登錄式交互shell,登錄Shell(不管是不是交互式的)文件加載順序如下:
/etc/profile
~/.bash_profile(,如果安裝了zsh,則.bash_profile 文件中的環(huán)境變量就無法起到作用,會(huì)加載~/.zprofile,這里面可以配置python環(huán)境變量等)
~/.bash_login
~/.profile
下面是幾個(gè)例子:
首先需要明確的是,讀取 ~/.bash_profile,該文件便會(huì)去讀取~/.bashrc,而~/.bashrc又會(huì)去讀取/etc/bashrc。所以只要讀取~/.bash_profile,便會(huì)同時(shí)讀取~/.bashrc與/etc/bashrc。
圖形模式登錄時(shí),順序讀取:
/etc/profile和~/.profile。圖形模式登錄后,打開終端時(shí),順序讀?。?code>~/.bashrc和
/etc/bashrc。文本模式登錄時(shí),順序讀?。?code>/etc/profile,
~/.bash_profile,~/.bashrc和/etc/bashrc。-
從其它用戶su到該用戶,則分兩種情況:
(1)如果帶-l參數(shù)(或-參數(shù),--login參數(shù)),如:
su -l username,則bash是lonin的,它將順序讀取以下配置文件:/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc。(2)如果沒有帶-l參數(shù),則bash是non-login的,它將順序讀取:
~/.bashrc和/etc/bashrc并從父進(jìn)程繼承其環(huán)境變量。 注銷時(shí),或退出su登錄的用戶,如果是longin方式,那么bash會(huì)讀?。?code>~/.bash_logout
執(zhí)行自定義的shell文件時(shí),若使用“bash -l a.sh”的方式,則bash會(huì)讀取行:
/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc,用sh -l a.sh調(diào)用bash,它將會(huì)執(zhí)行/etc/profile以及~/.profile。若使用其它方式,如:bash a.sh,./a.sh,sh a.sh,則不會(huì)讀取上面的任何文件,只能從其父進(jìn)程處繼承環(huán)境變量,像alias等就無法繼承使用了。上面的例子凡是讀取到
~/.bash_profile的,若該文件不存在,則讀取~/.bash_login,若前兩者不存在,讀取~/.profile。
參考:
https://blog.csdn.net/weixin_49539546/article/details/123536394
https://blog.csdn.net/qq_43516969/article/details/107726153?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-107726153-blog-85060825.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-107726153-blog-85060825.pc_relevant_default&utm_relevant_index=1