我一直在寻找为什么默认的 Debian shell 是无色的,但找不到答案。
为什么 Debian shell (bash) 默认是无色的?
答案1
为什么 Debian shell (bash) 默认是无色的?
因此(在.bashrc
普通 Debian 安装中,重点是我的):
# 如果终端有能力的话,取消彩色提示的注释;转身 # 默认情况下关闭,以免分散用户注意力:终端窗口中的焦点 # 应该出现在命令的输出中,而不是提示符上 #force_color_prompt=是 如果[-n“$force_color_prompt”];然后 if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null;然后 # 我们有颜色支持;假设它符合 Ecma-48 #(ISO/IEC-6429)。 (缺乏这种支持的情况极为罕见,而且这种情况 # 一个案例倾向于支持 setf 而不是 setaf。) color_prompt=是 别的 颜色提示= 菲 菲
换句话说,这是“一项功能”,或者如果您愿意的话,也可以是一种设计选择。
答案2
(问题的原始版本表明它与 root 的 shell 有关;我将其留在这里,因为它对于专门想知道这一点的用户可能有用。)
对于 root 来说,默认提示符是无色的,因为/etc/profile
— 或者更确切地说,/etc/bash.bashrc
— 定义了一个非常简单的提示:
# set a fancy prompt (non-color, overwrite the one in /etc/profile)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
和root
的默认值.bashrc
不覆盖它:
# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022
答案3
因为这是“如何在 debian 中为 root shell 着色”搜索的最高结果,所以我在这里发布我的解决方案:复制并覆盖/root/.bashrc
文件/etc/skel/bashrc
。
该文件比安装的文件要强大得多root
,并且也是系统上创建的任何新用户的默认文件。
以下是我多年来调整的 ls 着色摘录
alias la='LS_COLORS="mh=1;37" ls -A'
alias l='LS_COLORS="mh=1;37" ls -CF'
alias ll='LC_COLLATE=C LS_COLORS="mh=1;37" ls -lA --si --group-directories-first'
答案4
我最终得到了 @daniel-sokolowski 建议看看/etc/skel/.bashrc
.
但重要的是要注意,根据 bash 文档,[ -z "$PS1" ]
测试是区分交互式 shell 与非交互式 shell 的常用方法。
这样当你添加
# part from /etc/skel/.bashrc
...
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
您公开PS1=
任何类型的 shell,它可能会破坏非交互式命令,例如
ssh your-server ls -la
bash completion on: scp ssh://foo:/bar/<TAB>
vim scp://your-server//some/file
当仅作为交互式 shell 一部分的脚本发生不需要的 stdout 时,此命令将被破坏。
这种方式完整的解决方案是将块包装在[ ! -z "$PS1" ]
测试中
...
if [ ! -z "$PS1" ]; then
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
fi
unset color_prompt force_color_prompt