这个问题是关于最佳实践的。我知道通过安全外壳登录或切换用户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
答案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 中有一个“退出”。
答案2
我一直把 PS1 代码放在 bashrc 中。
我的代码如下:
export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W \e[1;37m(\e[1;32m|\e[1;33m|\e[1;31m|\e[1;37m]\\$ \[\e[0m\]"
我对 root (/root/.bashrc) 使用不同的 PS1 - 红色用户名,对于生产与本地服务器 - 不同的格式。
看到这个红迪特对于很酷的代码。换行技巧真的很有用!
答案3
由于这个问题本质上是征求意见,所以你会得到不同的答案。例如,良好的设计实践是使用尽可能少的位置来提供给定的功能。有些将这样的信息放在系统区域中,以减少用户自定义 shell 环境的工作量。
在我的环境中,我使用终端数据库并尽可能消除此问题中建议的转义序列的硬编码列表。例如,在我的目录编辑器中,我使用名字LS_COLORS
而不是数字(并且根本不使用):
BSD 同样在其系统中使用终端数据库ls
执行,但“颜色 ls”功能的可配置性较低。尽管 GNU ls 更易于配置,但它给出的结果值得怀疑。例如
TERM=vt100 dircolors
节目
setenv LS_COLORS 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'
其中(请参阅 ncurses 常见问题解答如何使用 VT100 获取颜色?)并不是一种改进。
其他人使用tput
为了获取实际颜色,允许通过单个环境变量 ( TERM
) 来更改自定义,而不是将信息分布在多个配置文件中。
如果将自定义放在系统区域中,则在将更新应用于系统时维护自定义会存在缺点。另外一些(如 Fedora 中的)已经存在了(参见特点/256 色终端)并可能涉及协调一台或多台机器的更改。
答案4
我想建议你把所有的别名和功能在一个文件中,通常是~/.bash_aliases
.
如果尚未存在,您可以添加.bashrc
(或任何您需要的地方)这些行:
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
取自 Ubuntu .bashrc
,当然你可以省略注释......
例如在 Ubuntu 下,那就是一个标准,但是这种文件的使用比 Ubuntu 更老......
笔记:
在新机器上设置帐户会更方便。