Linux Bash PS1的艺术!

如果你安装了Linux系统,是不是一直都在用系统默认设置呢?是不是想有一个很个性的设置,当别人看到时会眼前一亮!下面我们进行Linux的艺术之旅的开始之Bash的PS1设置。

话不多说,先上图:
my_bash.png

对应代码(Ubuntu:~/.bashrc文件;其他Linux系统大多在/etc/bash.bashrc或者/ect/bashrc文件中):

get_ps1()
{
Date=$(date +%F)

Time=$(date -R | cut -c 18-25 |sed ‘s/,//’)

Lunar=$(lunar date +%Y\ %m\ %d |grep ‘^Lunar\ :’ |awk ‘{print 3}' |sed 's/^.....\(.*\)../\1/’)

dn=(ls -l | grep ^d | wc -l);fn=(expr (ls | wc -l) - {dn})

Num=$(echo $Lunar|wc -m)
[ “$Num” = “5” ] && space=’ ’
[ “$Num” = “4” ] && space=’ ’

PS1=“\342\224\214[[\e[01;32m]{Date}/{Lunar} {space}{Time}[\e[00m]]\n
\342\224\234[[\e[01;34m]{dn}\[\e[00m\]+{fn}][[\e[01;34m]\w[\e[00m]]\n
\342\224\224[${debian_chroot:+($debian_chroot)}[\e[01;32m]\u@\h-\l [\e[00m]\342\225\260\137\342\225\257]$”
}
PROMPT_COMMAND=get_ps1

这段代码放在文件的那里?这个你可以自己决定,一般放到最后,这样就可以覆盖前面的设置。当然,你也可以对这些代码修改优化。

先介绍一下图中各部分代表意思:

第一行:[阳历日期/农历日期 当前时间]
PS:在Ubuntu下需要安装lunar软件,这是一个将阳历日期转换成阴历日期的软件。在Fedora系统下没有此软件,其他就不知道了。
第二行:[当前目录下目录数目+普通文件数目][当前目录]
第三行:[user@hostname-此终端是第几个 本人喜欢的特殊符号]

如果你想再折腾,那就随你了!!!

但是在你折腾这些之前,先要了解一些东西:

PROMPT_COMMAND

这个变量的内容会在显示bash提示符前执行,所以上面用到的实时内容需要它。

转义符
可以通过命令man bash获取,其如下:

PROMPTING
When executing interactively, bash displays the primary prompt PS1 when it is ready to read a command, and the secondary prompt PS2 when it needs more input to complete a command. Bash allows these prompt strings to be customized by inserting a number of backslash-escaped special characters that are decoded as follows:
\a an ASCII bell character (07)
\d the date in “Weekday Month Date” format (e.g., “Tue May 26”)
\D{format}
the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation.
The braces are required
\e an ASCII escape character (033)
\h the hostname up to the first `.’
\H the hostname
\j the number of jobs currently managed by the shell
\l the basename of the shell’s terminal device name
\n newline
\r carriage return
\s the name of the shell, the basename of $0 (the portion following the final slash)
\t the current time in 24-hour HH:MM:SS format
\T the current time in 12-hour HH:MM:SS format
@ the current time in 12-hour am/pm format
\A the current time in 24-hour HH:MM format
\u the username of the current user
\v the version of bash (e.g., 2.00)
\V the release of bash, version + patch level (e.g., 2.00.0)
\w the current working directory, with $HOME abbreviated with a tilde (uses the value of the PROMPT_DIRTRIM variable)
\W the basename of the current working directory, with HOME abbreviated with a tilde \! the history number of this command \# the command number of this command \$ if the effective UID is 0, a #, otherwise a
\nnn the character corresponding to the octal number nnn
\ a backslash
[ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
] end a sequence of non-printing characters

颜色
颜色字符串格式为:

[\e[特殊格式;字体颜色;背景颜色m]

  其中\e等效于\033,特殊格式、字体颜色、背景颜色可以省略,其顺序也无所谓,只要中间用分号‘;’隔开即可。下面列举其含义:

[table]
[tr][td]特殊格式[/td][td]含义[/td][td]字体颜色值[/td][td]背景颜色值[/td][td]颜色[/td][/tr]
[tr][td] 0[/td][td] 默认值[/td][td] 30[/td][td] 40[/td][td] 黑色[/td][/tr]
[tr][td] 1[/td][td] 粗体[/td][td] 31[/td][td] 41[/td][td] 红色[/td][/tr]
[tr][td] 22[/td][td] 非粗体[/td][td] 32[/td][td] 42[/td][td] 绿色[/td][/tr]
[tr][td] 4
[/td][td] 下划线[/td][td] 33[/td][td] 43[/td][td] 黄色[/td][/tr]
[tr][td]24
[/td][td] 非下划线[/td][td] 34[/td][td] 44[/td][td] 蓝色[/td][/tr]
[tr][td]
[/td][td] [/td][td] 35[/td][td] 45[/td][td] 洋红[/td][/tr]
[tr][td]
[/td][td] [/td][td] 36[/td][td] 46[/td][td] 青色[/td][/tr]
[tr][td] 7[/td][td] 反显[/td][td] 37[/td][td] 47[/td][td] 白色[/td][/tr]
[/table]

特殊字符
在终端命令提示符中,你也许要添加一个字符表情之类的东西,但你的Bash并不支持,你需要将它转义,如上面输出的╰_╯,这是三个符号的组合,其中\342\225\260代表╰,\137代表_,\342\225\257代表╯。如果你看到了一个喜欢的表情符号,但又不知道它转义之后的代码,你可以到这里进行转义。
参考网站
http://blog.csdn.net/gausszhch/article/details/5628009

https://wiki.archlinux.org/index.php/Color_Bash_Prompt

这么详细?不过太长了占位置而已。我表示一个$或者#足矣:lol:lol

太长了,占三行:dizzy:

好吧!各有所爱!我还是喜欢这样。你可以对这个进行缩减啊,但可能显示的相信就不是那么多了,除非你让单行更长。

各有所爱!