有很多方法可以为终端和外壳环境着色。单个命令的输出(例如ls和grep)也可以着色。在控制台上播放媒体的概念虽然没有直接关系但很有趣,但这似乎依赖于窗口系统之上的一些框架(库)。以下问题仅针对bashshell 及其在 Linux 终端框架中的实现及其基础。
请考虑以下 2D游戏场景的 ASCII“渲染”蒙太奇:

这些不是随机生成的场景。我选择的所有片段实际上都描绘了某种形式的“草原”地形(树木、灌木和灌木、花、草等),来自使用 ASCII 字符表示此类对象的游戏。最后 4 个场景展示了用户制作的图块集,它们基本上是带有颜色规格的 ASCII 字符的重新映射(这些细节是微不足道的 - 可以说这是我在这里尝试在视觉效果方面实现的视觉灵感,“图案”)。
蒙太奇分享的那些场景的共同特点是:
我目前在 VM 中拥有的是Arch Linux,虽然问题不是特定于发行版的,但我已经查看了他们的文档以自定义/etc/bash.bashrc文件。我可以看到很多解释都用于配置提示的外观以及通常的所有前景元素。除了通常的纯色外,几乎没有关于任何背景配置的信息,例如这些设置和提示:
# Background
On_Black='\e[40m' # Black
On_Red='\e[41m' # Red
On_Green='\e[42m' # Green
On_Yellow='\e[43m' # Yellow
On_Blue='\e[44m' # …Run Code Online (Sandbox Code Playgroud) 我设置了$TERM将这一行添加XTerm*termName: xterm-256color到我的.Xresources文件中的变量。当我这样做时,我不知道这究竟意味着什么(我正在按照在线指南更改 的外观xterm),但现在我读了更多,并且担心我所做的是否有误。具体来说,我想知道$TERM手动设置变量有什么不好,如果是,我该如何恢复我的错误。
如果您需要,我正在运行 Fedora 20 和xterm.
我知道这个问题已经被问过多次,但我没有找到其他问题的答案。
这里有一张图片来说明我的观点:
你能不眯眼就能看懂蓝线吗?不?我也不。
我正在以完整详细模式运行 ansible playbook,需要使用 50 多个任务的 playbook 阅读这些日志。
谁能解释我如何改变这些颜色?
我在没有想出解决方案的地方看到的问题:
我的终端提示行有问题。当这条线太长时,它会绕在同一条线上,然后Up arrow让它看起来更糟。
我已经检查过终端提示没有正确换行,但看起来我显然关闭了所有不可打印字符的方括号。
这是我的PS1:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot) }\[\033[01;36m\]\u@\h\[\033[00m\]\033[01;34m\]\w\033[00m\][$(type __git_ps1 >/dev/null 2>&1 && __git_ps1 "(%s)")]
Run Code Online (Sandbox Code Playgroud)
将此视为我的标准提示行
MELISC@work~/dev/bin_tools[((main))]
Run Code Online (Sandbox Code Playgroud)
我能够得到
assdasdasdasdasdadasdsadadasdaddasdadadasdadsadasdsa((main))] asdsadsadsadsadasdasdassdasdasdassdasdassdasdasdasdasdasdasdsadsad
Run Code Online (Sandbox Code Playgroud)
我已经检查过我的 .bashrc
我已经并且shopt -s checkwinsize应该自动检查列
我的配置的想法PS1是显示一些扩展信息,例如 Mercurial 或 Git 存储库状态、命令执行时间等。提示符被分成两行,因为它产生太多字符而无法放入一行。这是我PS1的.bashrc(不确定这里是否需要整个源代码):
function prompt_status {
local color_app="\e[1;38;5;214m"
local color_branch="\e[1;38;5;32m"
local color_revision="\e[0;38;5;64m"
if git rev-parse --is-inside-work-tree &> /dev/null; then
local branch="$(git rev-parse --abbrev-ref HEAD | tr -d '\n')"
local revision="$(git rev-parse HEAD | tr -d '\n')"
echo -ne $color_app"git "$color_branch"$branch "$color_revision"($revision)"
elif hg status &> /dev/null; then
local branch="$(hg branch | tr -d '\n')"
local revision_number="$(hg identify -n | tr -d '\n')"
local revision="$(hg parent --template '{node}' | tr -d '\n')"
echo …Run Code Online (Sandbox Code Playgroud)