51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1881|回复: 0
打印 上一主题 下一主题

Linux Bash 提示符的一些骚操作

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2017-11-15 15:06:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


    一些能让你自定义 Bash 提示符的黑科技 -- Dave Neary
    本文导航

      -如何设置 Bash 提示符 …… 10%
      -在哪里设置 PS1 的值? …… 19%
      -上面提到的 \u、\h、\W、\s 和 \v 是什么意思? …… 31%
      -还有哪些特殊的字符串可以用在提示符当中 …… 41%
      -多行提示符 …… 54%
      -还能再好玩点吗? …… 61%
    编译自: https://opensource.com/article/17/7/bash-prompt-tips-and-tricks
    作者: Dave Neary
    译者: toyijiu

    一些能让你自定义 Bash 提示符的黑科技

    当你在 Linux 环境下打开一个 Shell 终端时,会看到命令行中出现了类似下面的一个 Bash 提示符:
    [user@$host ~]$

    你知道命令行提示符其实是可以自己设置添加许多非常有用的信息的吗?在这篇文章中我就会教你如何自定义自己的 Bash 命令行提示符,想看的话就接着看吧~
    如何设置 Bash 提示符

    Bash 提示符是通过环境变量 PS1 (提示符字符串 1Prompt String 1) 来设置的,它用于交互式 shell 提示符。当然如果你需要更多的输入才能完成一个 Bash 命令时,PS2 环境变量就是用来设置多行提示符的:
    [dneary@dhcp-41-137 ~]$ export PS1="[Linux Rulez]$ "
    [Linux Rulez] export PS2="... "
    [Linux Rulez] if true; then
    ... echo "Success!"
    ... fi
    Success!

    在哪里设置 PS1 的值?

    PS1 就是一个普通的环境变量,系统默认值设置在 /etc/bashrc 中,在我的系统中,默认提示符通过以下命令来设置的:
    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

    它判断 PS1 是否是系统的默认值 \s-\v$ ,如果是的话则将值设置为 [\u@\h \W]\$。(LCTT 译注:注意命令中用 \ 做了转义。)
    但如果你想要自定义提示符,不应该修改 /etc/bashrc ,而是应该在你的主目录下将自定义命令加到 .bashrc 文件中。
    上面提到的 \u、\h、\W、\s 和 \v 是什么意思?

    在 man bash 中的 PROMPTING 章节中,你能够找到所有 PS1 和 PS2 相关的特殊字符的描述,以下是一些比较常用的:

      \u:用户名
      \h:短主机名
      \W:当前你所在的目录的名称(basename),~ 表示你的主目录
      \s:Shell 名字(bash 或者 sh,取决于你的 Shell 的名字是什么)
      \v:Shell 的版本号

    还有哪些特殊的字符串可以用在提示符当中

    除了上面这些,还有很多有用的字符串可以用在提示符当中:

      \d:将日期扩展成 “Tue Jun 27” 这种格式
      \D{fmt}:允许自定义日期格式——可通过 man strftime 来获得更多信息
      \D{%c}:获得本地化的日期和时间
      \n:换行(参考下面的多行提示符)
      \w:显示当前工作目录的完整路径
      \H:当前工作机器的完整主机名

    除了以上这些,你还可以在 Bash 的 man 页面的 PROMPTING 部分找到更多的特殊字符和它的用处。
    多行提示符

    如果你的提示符过长(比如说你想包括 \H 、\w 或完整的日期时间时 ),想将提示符切成两行,可以使用 \n 将提示符切断成两行显示,比如下面的多行的例子会在第一行显示日期、时间和当前工作目录,第二行显示用户名和主机名:
    PS1="\D{%c} \w\n[\u@\H]$ "

    还能再好玩点吗?

    人们偶尔也想将提示符变成彩色的。虽然我觉得彩色提示符让人分心、易怒,但是也许你很喜欢。如果我们想将日期变成红色的,目录变成青蓝色,用户名搞一个黄色背景,你可以这样做:
    PS1="\[\e[31m\]\D{%c}\[\e[0m\]
        \[\e[36m\]\w\[\e[0m\]\n[\[\e[1;43m\]\u\[\e[0m\]@\H]$ "


      \[..\] :表示一些非打印字符
      \e[.. :转义字符,后面的跟着的特定的转义字符串在终端中表示颜色或者其他意思
      31m :表示红色字体(41m 表示是红色背景)
      36m :表示是青蓝色字体
      1;43m :表示黄色字体(1;33m 表示黄色字体)
      [\e[0m]] :它在最后将颜色恢复成系统终端默认颜色

    你可以在 Bash prompt HOWTO[1] 这里找到更多的颜色代码,甚至可以让字符反相和闪烁!我不知道为什么地球人会有这种想法,但是你可以这么干!
    所以你最喜欢的自定义提示符是什么样子的呢?有没有让你抓狂的自定义提示符呢?请在评论里告诉我吧~
    (照片来源:ajmexico[2]. 修改自 Jason Baker[3]. CC BY-SA 2.0[4].)
    作者简介:
    Dave Neary - Dave Neary 是红帽开源和标准化团队成员,帮助开源项目对红帽的成功至关重要。自从在 1999 年为 GIMP 提交了第一个补丁以来,他一直带着各种不同的帽子,在开源的世界徜徉。
    via: https://opensource.com/article/17/7/bash-prompt-tips-and-tricks
    作者:Dave Neary[5] 译者:吴霄/toyijiu 校对:wxy
    本文由 LCTT 原创编译,Linux中国 荣誉推出

      [1]: Bash prompt HOWTO - http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
      [2]: ajmexico - https://www.flickr.com/photos/15587432@N02/3281139507/
      [3]: Jason Baker - https://opensource.com/users/jason-baker
      [4]: CC BY-SA 2.0 - https://creativecommons.org/licenses/by/2.0/
      [5]: Dave Neary - https://opensource.com/users/dneary


    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 16:05 , Processed in 0.064760 second(s), 32 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表