有一個練習:提示符修改過后永久保存,每次打開一個新的shell,提示符都為已設定好的格式,不會因為打開新的shell而不同。
在做這個練習的時候遇到了不少問題,通過不斷bing,將起初很陌生的問題一點點的解決,得到了一些理解,因此將理解寫下來。
提示符與變量PS1有關,PS1的值可以被修改或重新賦予。PS1的值變,則提示符也會變。通過搜索得到只要在/etc/bashrc中添加一句PS1=XXXXX就可以解決這個問題,其中XXXXX是一串符合PS1格式的值。可為什么在bashrc中添加一句話就將問題解決了?
要想PS1的值產生作用,那肯定是在打開shell時,系統已經執行過某些文件,然后執行過PS1重新賦值的那條語句。在這要先說下什么是shell,它有幾種,這幾種的區別。
shell是什么?比較專業抽象的解釋我就不說了,我直接舉些實例。當你打開電腦,來到linux的圖形化桌面的時候,其實你已經接觸到一個shell,這個圖形化的操作環境就是一個shell。然后在桌面右鍵,進入一個終端,而這個終端也是一個shell。然后,shell有兩種:login shell和non-login shell。login shell是需要用戶名、密碼登錄后才能進入的shell(或者通過”–login”選項生成的shell);而non-login shell則是不需要密碼和賬號的。從執行文件的順序的角度來講這兩者的區別:
在進入login shell時,系統自動執行的文件及順序:/etc/profile >
/etc/profile.d > ~/.bash_profile > ~/.bashrc > /etc/bashrc。
在進入non-login shell時,系統自動執行的文件及順序:~/.bashrc > /etc/bashrc
> /etc/profile.d。
因此到這里,可以解釋為什么要在/etc/bashrc下給PS1賦值。無論是以什么方式打開shell,都必然要執行/etc/bashrc,那么就會執行PS1重新賦值的語句,也就會得到想要的提示符。
那/etc/bashrc和~/.bashrc有什么區別? “~”表示的是家目錄,比如root用戶,他的家目錄為/root,那么“~”就等于/root。隱藏文件一般帶有“.”。不同的用戶有不同的家目錄,就有不同的.bashrc。那么系統根據不同的登錄用戶就會執行不同的.bashrc,給予用戶對應的使用習慣。而/etc下的文件設置的內容是全部用戶都相同的。因此如果是在/etc/bashrc對PS1賦值,就會對全部登錄這個系統的用戶有效;如果是在~/.bashrc下對PS1賦值,就會只和對應的用戶有效,而這用戶的提示符就會和別的用戶不同。
/etc/profile和/etc/bashrc有什么區別,它們一般有什么作用?profile是某個用戶唯一的用來設置環境變量的地方,因為用戶可以有多個 shell 比如 bash, sh, zsh 之類的,但像環境變量這種其實只需要在統一的一個地方初始化就可以了,而這就是 profile。bashrc是專門用來給 bash 做初始化的,比如用來初始化 bash 的設置,bash 的代碼補全,bash 的別名,bash 的顏色。以此類推也就還會有 shrc, zshrc 這樣的文件存在。
原創文章,作者:Eminem,如若轉載,請注明出處:http://www.www58058.com/81012