我应该在哪里保存 PS1 命令行/终端的颜色代码?

Jon*_*mar 5 command-line shell colors configuration

这个问题是关于最佳实践的。我知道通过安全外壳登录或切换用户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
Run Code Online (Sandbox Code Playgroud)

ilk*_*chu 1

我会将环境变量放入 .bash_login 或 .bash_profile 中,因为它们(导出时)会继承到子 shell,并且不需要为每个 shell 调用重置。并不是说重置它们实际上会花费任何成本,而是以防万一我想在子 shell 期间将环境变量设置为其他内容。如果 .bashrc 覆盖该设置,则很难做到这一点。

对于其他所有内容(包括函数),您希望将它们放在 .bashrc 中,因为 .bash_login 和朋友不会被子 shell 读取。.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 之间进行选择完全取决于您,在全局配置和每用户配置之间进行选择当然取决于您是否想要更改所有用户的行为,还是仅更改一个用户的行为。

至于拼写错误,请保持 shell 打开并在更改脚本后测试运行脚本。:) 并不是说​​一个简单的拼写错误就很重要,最坏的情况是它会停止读取初始化脚本和/或弄乱其余的设置。除非由于某种原因你的 .bashrc 中有一个“退出”。