Shell

我應該在哪裡保存 PS1 命令行/終端的顏色程式碼?

  • May 25, 2016

這個問題是關於最佳實踐的。我知道通過安全外殼登錄或切換使用者su,並且su -l有不同的效果。此外,如果您在配置中出現拼寫錯誤,您仍然希望能夠登錄。儲存顏色定義的理想位置在哪裡?目前我有他們在.bash_profile。可以存放它們.bashrc嗎?

配置位置:

根據 ArchWiki

  • /etc/profile``/etc/profile.d/*.sh在和 中獲取應用程序設置/etc/bash.bashrc
  • ~/.bash_profile 每個使用者,在/etc/profile.
  • ~/.bash_login(如果.bash_profile沒有找到)
  • ~/.profile(如果.bash_profile沒有找到)
  • /etc/skel/.bash_profile也來源~/.bashrc
  • ~/.bash_logout
  • /etc/bash.bashrc取決於-DSYS_BASHRC="/etc/bash.bashrc"編譯標誌。來源/usr/share/bash-completion/bash_completion
  • ~/.bashrc每個使用者,在/etc/bash.bashrc.

讓我們保存我有兩種顏色定義,一種用於命令提示符,一種用於ls命令。

set_prompt () {
   Last_Command=$? # Must come first!
   Blue='\[\e[01;34m\]'
   White='\[\e[01;37m\]'
   Redbold='\[\e[01;31m\]'
   Greenbold='\[\e[01;32m\]'
   Greenlight='\[\e[00;32m\]'
   Blueintense='\[\033[00;96m\]'
   Purplelight='\[\e[00;35m\]'
   Yellowbold='\[\e[01;33m\]'
   Graydark='\[\e[01;90m\]'
   Reset='\[\e[00m\]'
   FancyX='\342\234\227'
   Checkmark='\342\234\223'

   PS1="${Graydark}\t "
   if [[ $Last_Command == 0 ]]; then
       PS1+="$Greenlight$Checkmark "
   else
       PS1+="$Redbold$FancyX "
   fi
   if [[ $EUID == 0 ]]; then
       PS1+="\\u@$Redbold\\h "
   else
       PS1+="$Greenlight\\u$White@$Redbold\\h "
   fi
   PS1+="$Graydark\\W $Redbold\\\$$Reset "
}
PROMPT_COMMAND='set_prompt'

set_ls () {
   Default='0;0'
   White='97'
   Yellowbold='01;33'
   Greenlight='00;32'
   Purplelight='00;35'
   Purplebold='01;35'
   Whitelight='00;37'
   Yellowlight='00;33'
   Graydark='00;90'
   # Highlight
   Highlightpurpledark='45'
   Highlightgraydark='100'
   LS_COLORS="fi=$Greenlight:di=$White;$Highlightgraydark:*.tex=$Purplebold"
   export LS_COLORS
}
set_ls

我會將環境變數放在 .bash_login 或 .bash_profile 中,因為它們(在導出時)被繼承到子 shell 並且不需要為每個 shell 呼叫重新設置。並不是說重置它們實際上會花費任何成本,但如果我想在子shell 的持續時間內將 envvar 設置為其他東西。如果 .bashrc 覆蓋了設置,這很難做到。

對於其他所有內容(包括函式),您希望將它們放在 .bashrc 中,因為子 shell 不會讀取 .bash_login 和朋友。.bashrc 通常會通過配置文件/登錄腳本之一。

當然你對 PS1 的使用有點不同,因為你想要一個改變它的功能。

(Bash 的初始化文件有點有趣。登錄 shell 讀取 bash_profile 和朋友,但不是 bashrc。非登錄 shell 的工作方式正好相反。所以沒有文件會被所有 shell 呼叫讀取,除非 bashrc 是由配置文件腳本。參考 https://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files

在 .profile、.bash_profile 和 .bash_login 之間進行選擇完全取決於您,在全域配置和每使用者配置之間進行選擇當然取決於您是要更改所有使用者的行為,還是只更改一個使用者的行為。

至於拼寫錯誤,請保持打開外殼並在更改腳本後測試執行腳本。:) 一個簡單的錯字並不重要,最壞的情況是它會停止讀取初始化腳本和/或弄亂其餘的設置。除非出於某種原因在 .bashrc 中有“退出”。

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