`
weiyinchao88
  • 浏览: 1235023 次
文章分类
社区版块
存档分类
最新评论

SHELL彩色的命令行

 
阅读更多

彩色的命令行

概述

本文以 Bash shell 为例。(不同的终端里的转义序列不完全相同).

Shell 的配置

shell 彩色配置出现在 bash 的个人配置文件 ~/.bashrc 或者是全局配置文件 /etc/bashrc 里面。 可以通过 bashrc 里面的 PS1 变量来设置提示符的外观。

例如:
PS1="/s-/v/$ "
/s 表示 shell 的名称,-/v 表示版本号。 在提示符的最后面放置了一个 $。
PS1="/u@/h /w /$ "
表示 用户@ 当前目录 $

转义序列

要是通过彩色化提示符来增加个性化,就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。转义序列通常都是以 ESC 开头(这也是它的命名原因)。 在 shell 里表示为 ^[。也可以用 /033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, 用八进制表示为 33)。

要直接在 shell 里面输入转义序列需要先按 ctrl-v:CTRL-v ESC

使用 shell 的颜色

下面用一个提示符的例子来解释 shell 的颜色。
PS1="/[/033[0;32;40m/u@/h:/w/$ /]"
这样提示符就全部显示成绿色了。就像这样:
nico@ebrain:~$


/033 声明了转义序列的开始,然后是 [ 开始定义颜色。 后面的 0 定义了默认的字体宽度。稍后我会介绍其他的可用字符。 转义序列字符串要用 /[ 和 /] 括起来, 防止转义序列的文本显示在 shell 里占用太多的空间。

下面要选择前景色(这里是 32,代表绿色)。背景色的 40 表示黑色。 要是不想让提示符后面的文字也变成绿色,需要用 /033[0m 关闭转义序列, /033[0m 是 shell 的默认颜色。前景色和背景色都有 8 种可用的选择。

可选颜色:红色、绿色、黄色、蓝色、洋红、青色和白色。 他们对应的颜色代码是:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)。

用同样色方法设置背景色,不过要把第一个数字“3”替换成“4”, 例如 40、41、42、43、44、45、46、47。

示例:

PS1="/[/033[0;37;44m/u@/033[0;32;43m/h:/033[0;33;41m/w$/033[0m/]"
这给了非常多彩的提示符:
nico@ ebrain: ~$

使用 export PS1="string" 来测试这些设置;
PS1="/[/033[1;34;40m[/033[1;31;40m/u@/h:/w/033[1;34;40m]/033[1;37;40m $/033[0;37;0m/] "

[ nico@ebrain:~ ]

文本属性

刚才提到了,在第一个转义序列后面的“0”是提示符的文本的默认颜色设置。 对于文本属性来说,有意义的值及对应关系为:
0、默认值
1、粗体
22、非粗体
4、下划线
24、非下划线
5、闪烁
25、非闪烁
7、反显
27、非反显

通过下面这一段短小的脚本,可以看看色彩组合。

#!/bin/sh
############################################################
# Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de
# Last change: Mon Feb 16 16:24:41 CET 2004
############################################################

for attr in 0 1 4 5 7 ; do
echo "----------------------------------------------------------------"
printf "ESC[%s;Foreground;Background - /n" $attr
for fore in 30 31 32 33 34 35 36 37; do
for back in 40 41 42 43 44 45 46 47; do
printf '/033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back
done
printf '/n'
done
printf '/033[0m'
done

另一个程序

在 shell 中设置颜色不仅仅能创建更加漂亮的提示符, 在编写控制台程序的时候也非常有用。

对于一个要使用彩色的程序员,就必须要使用类似 slangncurses 这样的的库,者通常会增加执行文件的大小。 Ncurses 有着或多或少的独立于终端的类型的优势。

C 语言示例

用绿色打印“Hello Word”:
#i nclude <stdio.h>
int main(void){
const char *const green = "/033[0;40;32m";
const char *const normal = "/033[0m";
printf("%sHello World%s/n", green, normal);
return 0;
}
另外一个有用的转义序列是 printf("/033[2J"),它和 system(clear) 完成的功能一样。但是可以不需要头文件 unistd.h

使用printf("/033[1K") 可以删除一行。

初始化脚本示例

如果想在 /etc/init.dinit 脚本成功的执行后, 得到一个漂亮的、清晰易读的提示,而不是一个简单的 '.', 可以再一次的使用转义序列。

这是一段 cron init script 的摘录:
#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0

case "$1" in
start) echo -n "Starting periodic command scheduler: cron"
start-stop-daemon --start --quiet --exec /usr/sbin/cron

echo "."
;;

如果 cron 脚本执行成功就会显示一个句点。 可以用 [Ok] 给这些信息添加上彩色特征,通过改变 echo 字符串,例如:
#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0
case "$1" in
start) echo -n "Starting periodic command scheduler: cron"
start-stop-daemon --start --quiet --exec /usr/sbin/cron
echo "/[ /033[1;34;40m[ /033[1;32;40mOk /033[1;34;40m]/033[0m/]"
;;

把这个设置应用到所有的 init脚本上非常耗费时间, 除非使用转义序列 /033 —— 因为 Ctrl-v 不是作为一个字符来处理的。

定制命令提示符

我们可以定制要显示的bash命令提示符,包括当前用户名和主机名,当前时间,平均负载和当前工作目录。要实现该目的,修改$PS1变量,如下所示:

bash> PS1='u@h:w @> '
bash> export PS1
root@medusa:/tmp 03:01 PM>

结果将会在命令行显示当前登录的用户名、主机名、当前工作目录和当前时间。从用户指南页可以获得bash可以理解的符号列表。

分享到:
评论

相关推荐

    shell下彩色进度条脚本

    在Shell脚本中实现彩色进度条,可以使得命令行界面更具交互性和可视性。本教程将详细介绍如何在Shell脚本中创建一个蓝色的彩色进度条。 首先,让我们了解基本概念。进度条通常由一系列字符组成,如"["、"]"、"#"等...

    python阮一峰-阮一峰:Fishshell入门教程.pdf

    启动Fish Shell后,系统会默认以彩色显示命令,无效命令显示为红色,有效命令为蓝色,路径有效性则通过下划线来表示。这种色彩提示增强了可读性,帮助用户快速识别命令的正确性。 Fish Shell的一个独特功能是自动...

    customize shell prompt

    例如,你可以使用ANSI转义码来实现彩色提示符,使命令行更具可读性。例如,红色的用户名,绿色的路径,以及蓝色的提示符号。 懒人快速更改提示符的方法是使用现成的脚本或工具,这些工具可以快速应用预设的提示符...

    swift-小工具集辅助你用Swift语言写命令行程序

    3. **颜色输出**:为了提高命令行界面的可读性,小工具集可能会提供彩色输出的功能,让错误信息、警告或成功消息更加突出。 4. **文件操作**:命令行工具经常需要与文件系统交互。小工具集可能提供了方便的文件读写...

    PHP 命令行参数详解及应用

    通过这些命令行参数,开发者可以将PHP脚本作为shell命令来使用,例如`php -q 文件名.php`可以直接运行PHP脚本,而`php -s 文件名.php`则可以将PHP源代码以彩色HTML的形式展示出来。此外,结合PHP的ODBC功能,可以在...

    Windows shell cmd bash 第三方增强注入 Clink

    Clink 将本机 Windows shell cmd.exe与 GNU Readline 库强大的命令行编辑功能相结合,后者提供了丰富的完成、历史记录和行编辑功能。 Readline 最出名的是它在 Unix shell Bash 中的使用,这是许多 Linux 发行版的...

    freebsd命令行提示符的修改

    这些ESC序列可以嵌入到命令行提示符的格式化字符串中,以达到彩色显示的效果。例如,在题目给出的部分内容中: ```bash setprompt="%{\e[31;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%c%{\e[37m%}%#%{\e...

    [C#][附源码]模拟bash shell一个命令

    这个程序虽然不支持命令行参数,但它具有一个吸引人的特点,即输出的日历是彩色的,这使得用户界面更加友好,提高了可读性。 首先,我们需要了解`cal`命令的基本功能。在Bash Shell环境下,`cal`命令用于显示当前...

    Ubuntu下的oh-my-zsh,ls彩色显示各种类型的文件.docx

    在 Ubuntu 系统中,默认的命令行工具是 Bash,但是随着 oh-my-zsh 的出现,许多用户开始使用 zsh 作为默认 shell。oh-my-zsh 是一个基于 zsh 的配置框架,提供了许多实用的功能和插件。但是,在 oh-my-zsh 中,默认...

    5Shell脚本.zip

    Expect是一个用于自动化交互式程序的工具,它可以与Shell脚本结合使用,模拟用户与命令行接口的交互,如在SSH登录、输入密码等场景。`expect`关键字用于创建这样的脚本。 3. **正则表达式**: 正则表达式是用于...

    linux shell的输出效果修改方法(界面颜色)

    ### Linux Shell 的输出效果修改方法 (界面颜色) 在 Linux 系统中,用户可以通过命令行进行各种操作。为了使输出信息更加醒目或是便于区分不同的输出内容,Linux 提供了一种称为“ANSI 非常规字符序列”的机制来...

    Linux与Unix Shell编程指南

    7. **第二十一章:创建屏幕输出** - 讨论了如何通过Shell脚本控制屏幕输出,包括使用`echo`、`printf`以及如何创建彩色输出和日志记录。 8. **第二十二章:创建屏幕输入** - 描述了如何从键盘或文件获取用户输入,...

    在Bash下输出彩色的文本

    在Bash shell中,我们经常需要处理命令行输出,使其更具可读性和视觉吸引力。输出彩色文本是提高命令行界面用户体验的一种有效方式。这通常涉及到使用ANSI转义序列,这些序列可以改变文本的前景色、背景色以及样式,...

    Go-Grumble一个强大的现代CLI和SHELL

    Grumble允许开发者输出彩色的和格式化的文本,增强了命令行界面的可读性和美观度。这对于那些需要输出大量信息或需要区分不同状态的应用尤其有用。 8. **插件支持** 如果需要,Grumble还可以支持插件系统,使得第...

    ColorEchoForShell:轻松使shell(shell)的:speech_balloon:(`echo`):rainbow:支持:white_heavy_check_mark:sh:white_heavy_check_mark:bash:heavy_plus_sign:zsh:heavy_plus_sign:ksh:heavy_plus_sign:

    《ColorEchoForShell:为Shell命令行添加彩色输出的魅力》 在日常的系统管理和脚本编写中,我们经常使用Shell命令行,其中`echo`命令是不可或缺的一部分,它用于输出文本到终端。然而,标准的`echo`命令输出的是纯...

    ShellControl-控制台仿真控件

    4. **格式化输出**:除了基本的文本输出,ShellControl还可以支持彩色输出和格式化的文本,以增强用户界面的可读性和吸引力。 5. **集成到WinForms或WPF**:由于ShellControl是一个.NET控件,可以轻松地添加到...

    linux-bashfullofcolors高级bashrc和bashprofile并拥有彩色输出

    在Linux系统中,Bash(Bourne-Again SHell)是默认的命令行解释器,用户通过它来与操作系统进行交互。`.bashrc`和`.bash_profile`是两个非常重要的配置文件,它们用于定制Bash shell的行为。本文将深入探讨这两个...

Global site tag (gtag.js) - Google Analytics