热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BASH命令提示符改造

文章标题:BASH命令提示符改造。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  用过linux下terminal的人对这样的命令提示符都不会感到陌生

  user@hostname-laptop~$

  这样的提示符本没什么问题,特别是多用户状态下,还能清楚地知道自己的用户名的主机。

  但是,它有一个毛病,那就是把目录同时显示了出来,有时候目录过长的时候,占用了整行,让人很郁闷,比如

  user@hostname-laptop/usr/local/share/man$

  当然,在多用户远程终端下,用户名,主机,用当前目录都是很重要的,怎样合适取决于你个人的需要。

  现在我的需要是在单用户的gnome-terminal下对命令提示符进行改造。用户名和主机根本就不需要提示,或者干脆将其连同当前目录显示在gnome-terminal的标题栏上。另外,还可以加一些其它的特性和颜色。

  现以ubuntu10.04系统为例!

  首先,对命令提示符(prompting)进行改造之前,要清楚是什么东西在对它进行控制。看一下帮助(man bash), 搜一下prompt,一下子就看到了这样几个变量,PS1, PS2, PS3, PS4。再看一下当前系统变量中有没有这几个变量,echo $PS1, echo $PS2, echo $PS4这三个在我的系统里是有的。

  echo $PS1的结果是

  \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

  echo $PS2的结果是

  >

  echo $PS4的结果是

  +

  容易看出来,PS1就是用来控制当前命令提示符的,而PS2则用来控制命令没有输完就换行的情况下的提示符。这里我们只关心PS1,这个字符串由许多转义字符组成,这些转义字符表示什么意思,可以查看info bash。

  有几个转义字符是比较明显的,\u表示user, \h表示hostname, \w表示当前目录(将用户主目录缩写成~)。

  再看一下${debian_chroot:+($debian_chroot)},查了一下,这是一个条件赋值。如果系统中有debian_chroot变量,那么就会加上($debian_chroot),比如我在~/.bashrc中加上export debian_chroot="AAA",那么,我的命令提示符会变成

  (AAA)user@hostname-laptop~$

  debian_chroot和/etc/debian_chroot文件有关,而我的系统下既没有这个文件,debian_chroot变量又没有定义,因此,这一项我可以无视。

  info bash中告诉我们,\[和\]是一对限定符,用来限定一些非打印字符。其潜在意思没有说出来,既然是非打印字符,为什么要限定呢?反正又不会显示。其实不限定一下是会出问题的,因为这些非打印字符会造成命令提示符的混乱。比如从vim退出来时,或者用方向键查看命令历史记录时,会出现一些不友好的状况。因此,这一对限定符的作用在于,终端在决定命令提示符宽度的时候,完全忽略这些非打印字符,同时,它又不会影响这些非打印字符的功能。

  另外,它还有一层意思,那就是,非打印字符必须要放在这一对限定符中间。

  知道了这一点之后,就剩下\e]0;\u@\h: \w\a 这一串符号了。

  \e]0;titlebar\a会标题栏上显示titlebar,即\e]0;和\a及之间的字符构成一个非打印序列,它的作用是将这些字符显示在gnome-terminal的标题栏上。

  \e的ASCII码是033,它还有一个重要作用是颜色的设定。如果用终端上过BBS的人应该知道这个东西,终端上的颜色都是通过它来控制的。

  具体来说,控制当前颜色的命令置于\e[和m之间,中间有一些用分号隔开的数字。比如

  \e[32;1m表示亮绿色。

  其中32表示颜色,1表示颜色的深浅。另外,\e[0m表示恢复原状,后面的文字将不受前面颜色的影响。

  因此,修改后的设置应该是

  export PS1="\[\e]0;\u@\h: \w\a\e[32;1m\]\$\[\e[0m\] "

  注意,前后各有两个非打印字符序列。

  另外,有时候,知道前一个程序运行的结果代码也很有用,其代码是$?,因此,上面的设置又可以改成

  export PS1="\[\e]0;\u@\h: \w\a\e[32;1m\]$?\$\[\e[0m\] "

  附录, ascii颜色控制代码(ANSI/3.64)

前景色
   背景色   控制
 30
 40
 黑  0 关闭所有属性
 31
 41  红  1 高亮
 32 绿
 42  绿  4 单划线
 33
 43  黄  5 闪烁
 34
 44  蓝  7 反显
 35 粉红
 45  粉红  8 消隐
 36
 46  兰  
 37
 47  白
 

  因此,每个颜色控制可以由三个数字来控制,比如\e[31;45;5m表示闪烁红字粉底。当然,对闪烁的支持需要有特定的终端。对于gnome-terminal来说,命令

  printf "\e[31;45;5mABC"

  就不会有闪烁的效果,但颜色是有的。

  上面只是给出了ASCII码控制命令中的颜色控制,在实际应用中,比如BBS的终端显示,还涉及到许多其它的控制命令,比如清除屏幕,设置光标等等。具体可以参考一些BBS站的相关版面,比如bdwm的asciiart版, 水木的asciiart版。


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • 系统安装Debian系统的安装方式和Ubuntu系统的安装方式几乎是一样的,毕竟Ubuntu系统是基于Debian的,就如同CentOS基于Redhat ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 如何将CentOS8转换为CentOSStream
    CentOS Stream是一个持续交付的Linux发行版,它在RHEL之前处于领先地位。它将具有滚动发布,即不断进行更改。CentOS将成为一个上游版本,它将具有测试补丁和更新。 ... [详细]
  • 对于一般的扩展包,我们一般直接pipinstallxxx即可安装,但是unrar直接安装后,发现并不能通过Python程序实现解压的功能& ... [详细]
  • Linux神奇漏洞:长按回车键70秒 即可轻松拿到Root权限
    一般来说获取系统root权限是很困难的,尤其是加密系统中,但西班牙安全研究员hectormarco、ismaelripoll发现,linux系统下只需按住回车键70秒钟,就能轻 ... [详细]
  • python3.7 安装pip3_python3的pip3安装
    ---恢复内容开始---pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子:inearAi:~$pip3-Vpi ... [详细]
  • 阿里云服务器iis设置方法与上千种Linux桌面版本相比,Linux服务器只有可怜的十几种。但想要选对适合你的企业需要的仍然不是件容易的事情,选Linux服务器首先要 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • Kali Linux 简介
    KaliLinux是世界渗透测试行业公认的优秀的网络安全审计工具集合,它可以通过对设备的探测来审计其安全性,而且功能完备,几乎包含了目前所 ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ... [详细]
author-avatar
风云变幻1892_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有