Linux 奇技淫巧:8 个有用且有趣的 Bash 提示
在下方公众号后台回复:面试手册,可获取杰哥汇总的 3 份面试 PDF 手册。
许多人并不认为命令行提示符是一个有用的元素,甚至不太注意它。然而,一个有用的提示符可以改变您使用命令行的方式,并通过扩展,改变您的系统。本文通过示例向您展示了许多有用和有趣的Bash提示。请注意,我们从提示符本身开始,然后进一步说明如何使用它们。
这里我们提供了一些 Bash 提示,并不是所有的都是严肃认真的。例如,我们在列表中的第一个条目可以为您在使用命令行时带来一点乐趣!
1、执行命令之后显示“字符表情”
这个提示很有趣但很有用!这个想法是,只要你执行成功的命令,你的提示就会显示一个快乐的字符表情。
相反,当命令失败时,你会看到一个悲伤的字符表情。
要应用它,请使用以下代码:
PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$"
效果图如下:
这可能看起来令人困惑,但我们使用 if 语句来确定命令是好是坏。从那里,我们在颜文字周围使用一些转义,以确保它们以正确的方式显示。
2、当终端发出错误命令时更改 Bash 提示的颜色
可以说,这个提示是列表中最有用的。像上面一样,如果您的最后一个命令未能运行,提示会更改颜色,但也会缩短长路径并包含每个命令的 Bash 历史记录编号以便于检索。
PROMPT_COMMAND='PS1="\[\033[0;33m\][\!]\`if [[ \$? = "0" ]]; then echo "\\[\\033[32m\\]"; else echo "\\[\\033[31m\\]"; fi\`[\u.\h: \`if [[ `pwd|wc -c|tr -d " "` > 18 ]]; then echo "\\W"; else echo "\\w"; fi\`]\$\[\033[0m\] "; echo -ne "\033]0;`hostname -s`:`pwd`\007"'
效果图如下:
同样,这看起来很难实现,但它很简单。我们再次使用 if 语句以及颜色代码来突出显示各种消息。
您可以将这些颜色设为您喜欢的任何颜色,但我们会运用一些逻辑思维,更改后的颜色应该对您有所帮助,而不是仅仅为了进行更改而更改。
3、将Bash提示扩展到多行
有时,你可能希望在 Bash 提示中包含大量信息。这个 Bash 提示可能会让你感兴趣。它显示日期、时间、完整目录路径、用户名和主机名、活动终端,甚至文件计数和空间使用情况。
PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"
效果图如下:
在这里,我们不需要 if 语句,因为提示本身将具有静态布局和动态内容。您可能还会发现很难解析这个元素中的不同元素。我们的建议是应用它,然后逐条运行提示。通过一些交叉引用,您将开始了解提示是如何组合的。
4、使用颜色使您的 Bash 提示更具可读性
除了很好地使用颜色来分隔不同的信息之外,这个提示没有什么特别之处。如您所见,它提供了时间、用户名和主机名以及当前目录。
PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$"
效果图如下:
这是最有用的 Bash 提示之一,也是您自定义提示时首先要查看的区域。它可以为您学习自定义提示的工作原理提供良好的基础。
5、显示完整目录路径
就像使用颜色一样,这个提示是一个干净且最少的两行提示(尽管顶部有一个空行)。
我们在第一行显示完整的工作目录路径,然后在底部显示用户。
PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"
效果图如下:
如果不想在提示中使用空行,可以去掉第一个\n。但是,请调整布局和格式,因为每个终端体验都会因您的计算机和命令行设置而异。
6、显示后台作业计数
这个两行显示我们尚未在 Bash 提示中使用的信息。我们提供后台作业的运行记录。如果您同时处理多项任务但需要密切关注任何活动,这将非常有用。
第一行是用户名和主机名,以及工作目录路径。在第二行,我们有历史编号和后台运行的作业计数。
PS1='\[\e[1;32m\]\u@\H:\[\e[m\] \[\e[1;37m\]\w\[\e[m\]\n\[\e[1;33m\]hist:\! \[\e[0;33m\] \[\e[1;31m\]jobs:\j \$\[\e[m\] '
效果图如下:
尽管它可以为您提供有关系统活动的一些急需的信息,但它没有什么特别之处。您甚至可以将其转换为更复杂的提示,并添加 if 语句和颜色编码以在作业达到特定级别时通知您。
7、显示工作目录的信息
有了这个,我们会在第一行显示用户名和主机名、作业计数以及日期和时间。下面是当前目录,以及目录中的文件数量和一些有关磁盘使用情况的信息。
PS1="\n\[\e[30;1m\]\[\016\]l\[\017\](\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\j\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\]-(\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"
效果图如下:
所有这些提示的最大问题是弄清楚围绕格式化和转义发生了什么。但是,与多行提示一样,您应该一点一点地解决这个问题,直到您了解整体结构。
您甚至可以一次输入一部分并注意它是否显示或是否有错误,然后处理完整的代码段。
8、创建你自己的 Bash 提示
自定义 Bash 提示。
您可以结合以上任何一项和所有内容来创建您自己的自定义 Bash 提示。例如,这是对列表中第七个的修改,但已更改为占用更少的空间并包含一些特定和相关的信息。
双线式总是更紧凑,因为您可以看到完整路径,而不会减少您使用的命令的空间。
PS1="\n\[\e[32;1m\](\[\e[37;1m\]\u\[\e[32;1m\])-(\[\e[37;1m\]jobs:\j\[\e[32;1m\])-(\[\e[37;1m\]\w\[\e[32;1m\])\n(\[\[\e[37;1m\]! \!\[\e[32;1m\])-> \[\e[0m\]"
效果图如下:
到现在为止,您可能已经了解此提示的作用,但我们的建议是尝试创建自己的提示而不是粘贴此提示。这样,您就可以开始了解不同元素如何协同工作,甚至可能想出您自己的自定义 Bash 提示。
总结
如果您经常使用命令行,或者在启动终端应用程序时有特定需求,那么自定义提示可能是一个好主意。不需要太多知识,在很多情况下,您可以从其他开发人员那里找到您需要的提示。
来自:Linux迷
链接:https://www.linuxmi.com/linux-8-bash.html