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

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可以理解的符号列表。

分享到:
评论

相关推荐

    具体源代码myshell.c

    设计简单的命令行myshell,并能在实验环境下运行。 要求支持的命令如下: 1. cd [directory] 将当前目录改为 [directory] 2. environ 列出所有环境变量 3. ls 列出指定目录下所有文件 4. help 显示所有支持的命令 5....

    jsimpleshell:在Java中将强大的shell设置为cli的框架

    这个项目是一个轻量级且易于使用的库,通过它,您可以在Java中创建自己的shell(作为命令行界面)! 它基于但使用改善了外壳功能。 功能列表 通过注释实现命令 显示每个命令的帮助文本 彩色输出 持久的命令历史 ...

    fish:用户友好的命令行外壳-开源

    fish支持24位真彩色,这是终端技术中的最新技术。 看得出彩虹是等距的。 fish是完全可编写脚本的,并且其语法简单,简洁且一致。 您再也不会写esac。 对于那些拥有图形计算机的幸运儿,您可以从网页上设置颜色并...

    colorstatic-bash:有趣Linux Bash混合功能脚本,可在命令行中生成随机的彩色“静态”“矩阵”样式动画

    静态重击关于描述有趣Linux Bash混合功能/脚本,可在命令行中生成随机的彩色“静态” /“矩阵”样式动画。环境建立状态

    go-staticmaps:Go语言库和命令行工具,可使用OpenStreetMap切片渲染静态地图图像

    go-staticmaps随附有一个称为create-static-map的命令行工具,可在shell脚本等中使用。 如何? 安装 安装go-staticmaps就像 go get -u github.com/flopp/go-staticmaps 对于命令行工具,请使用 go get -u github....

    vimcmdline:将代码发送到命令行解释器

    该插件将或中的行发送到命令行解释器(REPL应用程序)。 支持Clojure,Golang,Haskell,JavaScript,Julia,Jupyter,Kotlin,Lisp,Macaulay2,Matlab,Prolog,Python,Racket,Ruby,Sage,Scala,Shell脚本,...

    gmic:G'MIC 是一个用于图像处理的全功能开源框架,提供几种不同的用户界面来转换操作过滤器可视化通用图像数据集,范围从 1d 标量信号到 3d+t 多光谱体积图像序列,包括 2d 彩色图像。 http

    1 - ,一个命令行界面,用于从 shell 使用G'MIC图像处理功能。 在这种情况下, G'MIC可能被视为或软件套件的友好伴侣。 2 - ,一个小型、可移植、线程安全和多线程的C++图像处理库,可链接到第三方应用程序。 允许...

    pomodoro:用于Mac命令行的轻量级Pomodoro计时器

    用于mac命令行的轻量级pomodoro计时器。 特征 它具有彩色文字 说话! ...好吧...就是这样...(我真的应该不再拖延了...) 用法 下载文件。 通过运行以下命令使./pomodoro可执行: chmod +x ./pomodoro 打开它! ...

    Caporal.js:使用node.js构建命令行应用程序(cli)的全功能框架

    资本使用node.js构建命令行应用程序(cli)的功能全面的框架,包括帮助生成,彩色输出,详细程度控制,自定义记录器,强制和强制转换,错别字建议以及针对bash / zsh / fish的自动完成功能。安装只需将Caporal添加为...

    适用于iOS的SSH和SFTP客户端-Swift开发

    Pisth Pisth是SSH和SFTP客户端。 使用Pisth上传,查看和编辑SSH服务器中的文件。 功能:•在SSH服务器中管理文件,并在同一应用程序中使用命令行管理程序。...•使用Pisth或Ma在其他设备之间共享Shell会话

    Linux高级bash编程

    为什么使用shell编程 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. Bash变量是...

    灰度:Android的快速设置图块可切换灰度显示

    可以通过从命令行运行以下命令来通过adb完成此操作: adb shell pm grant io.github.rsookram.greyscale android.permission.WRITE_SECURE_SETTINGS如果以后要删除该权限,可以运行: adb shell pm revoke io....

    libra-client:适用于Libra网络的python客户端

    libra ,一个命令行工具。 它具有现代的彩色文本界面,其输出是标准的json格式。 因此,它可以轻松集成到任何编程语言中。 python api ,客户端访问libra的python api的集合。 对于Python程序员,您可以调用此...

    Advanced Bash-Scripting Guide <>

    使用getopt 来分析命令行选项 12-52. 一个拷贝自身的脚本 12-53. 练习dd 12-54. 记录按键 12-55. 安全的删除一个文件 12-56. 文件名产生器 12-57. 将米转换为英里 12-58. 使用 m4 13-1. 设置一个新密码 13-2. 设置...

    Vim用户手册中文版72.pdf

    06.5 彩色打印 06.6 进一步的学习 第07章 编辑多个文件 07.1 编辑另一个文件 07.2 文件列表 07.3 切换到另一文件 07.4 备份 07.5 在文件间复制粘贴 07.6 查看文件 07.7 更改文件名 第08章 分隔窗口 08.1 分隔一个...

    cloudmesh-common:使python编程更容易并在cloudmesh中使用的通用方法

    它们用于与系统交互,并提供许多功能来实现命令行程序和shell。 安慰 控制台提供了方便的方式来在终端中打印彩色消息类型,例如错误,信息和常规消息 from cloudmesh . common . console import Console Console ....

    bash-menu:bash 的控制台菜单系统

    您希望执行的命令行 空格,按项目对目录和命令进行分组 这是显示启动目录菜单,然后切换到命令菜单的屏幕截图: 您可以使用菜单从这些列表中进行选择。 从菜单中选择一个目录会更改为该目录。 从命令菜单中选择一个...

    ascii-flags:ASCII艺术中的迷你国旗(3x1个字符)

    ASCII标志这是尝试为命令行界面提供一种显示国家标志的方法。 每个标志是三个与相关国家标志近似的角色的ANSI彩色序列。 pure-ascii目录仅使用普通ascii字符。 unicode (在UTF-8中)使用Unicode字形来改善某些形状...

    vim user manual ---vim用户手册

    j06.5j 彩色打印 j06.6j 进一步的学习 jusr 07.txtj 编辑多个文件 j07.1j 编辑另一个文件 j07.2j 文件列表 j07.3j 切换到另一文件 j07.4j 备份 j07.5j 在文件间复制粘贴 j07.6j 查看文件 j07.7j 更改文件名 jusr 08....

    dotfiles:个人配置文件

    安装git clone oibind / dotfiles && cd dotfiles &&...命令行模糊查找器 ack的更好版本 grep,但速度更快ls的彩色替代品网页浏览器90年代以来的屏幕储物柜 使用systemd自动登录thinkpad基座管理所有重要的强制屏幕截图

Global site tag (gtag.js) - Google Analytics