如何自定义.bashrc以配置命令提示符?


8

有没有一种简单的方法可以更改我的Bash提示以修改颜色和显示什么文本?我听说这是在中完成的.bashrc,但是我还没有找到任何简便的修改方法。Bash中的颜色如何表达?


请确保浏览bash+prompt,尽管我认为我们那里没有教程。
吉尔斯(Gilles)“所以,别再邪恶了”,

2
Arch Linux Wiki上有一个很好的指南来设置颜色bash提示,包括颜色列表和一些很好的示例。
jasonwryan 2011年

Answers:


4

我曾经有在我的定义.bashrc

export e="\e["

function cls          { echo -n "${e}H${e}J${e}0m"; }
function rcls         { echo -n "${e}H${e}J${e}S${e}H${e}J${e}0m${e}u${e}J"; } # not quite yet !
# rcls only works when no funny codes have been issued in between, i.e. the buffer is clean
# below the current screen. And then there can be issues with the first line of the buffer.

function bright       { echo -n "${e}1m"; }
function normal       { echo -n "${e}0m"; }
function colour       { echo -n "${e}$1;$2;$3m"; }
function black        { echo -n "${e}30m"; }
function bg_black     { echo -n "${e}40m"; }
function red          { echo -n "${e}31m"; }
function bg_red       { echo -n "${e}41m"; }
function green        { echo -n "${e}32m"; }
function bg_green     { echo -n "${e}42m"; }
function yellow       { echo -n "${e}33m"; }
function bg_yellow    { echo -n "${e}43m"; }
function blue         { echo -n "${e}34m"; }
function bg_blue      { echo -n "${e}44m"; }
function magenta      { echo -n "${e}35m"; }
function bg_magenta   { echo -n "${e}45m"; }
function cyan         { echo -n "${e}36m"; }
function bg_cyan      { echo -n "${e}46m"; }
function white        { echo -n "${e}37m"; }
function bg_white     { echo -n "${e}47m"; }
function c_up         { echo -n "${e}$1A"; }
function c_down       { echo -n "${e}$1B"; }    # within
function c_right      { echo -n "${e}$1C"; }
function c_left       { echo -n "${e}$1D"; }    # screen
function c_pos        { echo -n "${e}$1;$2f"; } # [Hf]
function c_line       { echo -n "${e}$1d"; }
function screentop    { echo -n "${e}H"; }      # [Hdf]
function linetop      { echo -n "${e}G"; }
function buffertop    { echo -n "${e}u"; }      # depends on other control characters ?
function tab          { echo -n "${e}I"; }
function backtab      { echo -n "${e}Z"; }
function scrolldown   { echo -n "${e}$1T"; }    # within screen
function scrolldown_B { echo -n "${e}$1L"; }    # scroll down below cursor
function scrollup_B   { echo -n "${e}$1M"; }    # scroll up below cursor
function clear        { echo -n "${e}J"; }      # delete to end of screen
function cleanbuffer  { echo -n "${e}S"; }      # copies first screen to bottom and clears
                                                # everything else above the cursor.
#function xxx { echo -n "${e}xxx"; }

export -f bright normal colour
export -f black bg_black red bg_red green bg_green yellow bg_yellow
export -f blue bg_blue magenta bg_magenta cyan bg_cyan white bg_white
export -f c_up c_down c_right c_left c_pos c_line
export -f screentop linetop buffertop tab backtab
export -f scrolldown scrolldown_B scrollup_B clear cleanbuffer

然后,您可以将其用于例如:

PS1_init="\n$(bright)$(black)$(hostname):\w\n$(bg_blue)"
PS1_end="$(normal)$(bright)\n\! -> $(normal)$(clear)"
export PS1="$PS1_init"'$(date)'"$PS1_end"

这些可能对您有帮助。

我把它们变成函数而不是变量的原因是懒惰。我只是想减少打字。当然,如果您寻找效率变量,那就更好了。

在一天结束时,尽管这些仅适合某些终端。因此,对于任何帮助,请查阅您的终端文档,而不是bash或任何其他shell的文档。


到目前为止,我所见过的最好的bashrc定义之一!
theTuxRacer 2011年

1
变量将省去键入:bright=$'\e1m'等等。(除非您需要与不具有该$'…'语法的非常旧的版本兼容。)
Gilles'所以不要再邪恶了''

@Gilles,您误会了:我更喜欢blue在提示符下(或在Shell脚本中)键入echo $blue
asoundmove 2011年

2

Bash使用Ansi配色方案-Wikipedia文章:http : //en.wikipedia.org/wiki/ANSI_escape_code#Colors

例如,这是我的提示:(我喜欢我的提示在单独的一行上,但并非所有人都喜欢。此外,我的用语具有深色背景-如果您的用语较浅,请调整颜色。)

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[31m\]\h \[\e[0;36m\]\t \[\e[93m\]\w\[\e[36m\] p$$-\!-\$\[\e[0m\]\n\$ '

特殊提示值在Bash联机帮助页的“提示”下进行了描述:

\u  the username of the current user
\h  the hostname up to the first `.'
\t  the current time in 24-hour HH:MM:SS format
\w  the current working  directory,  with 
    $HOME  abbreviated with  a tilde
    (uses the value of the PROMPT_DIRTRIM variable)
$$  PID of the Bash (helps distinguish my many terms.
    Useful, eg, if I have to kill something.
\!  the history number of this command
\n     newline
\$  if the effective UID is 0, a #, otherwise a $

1
Bash不使用ansi配色方案。终端执行转义码。Bash可以在任何终端上使用,因此最好使用tput setf _n_获取转义码来设置前景色。
camh 2011年

0

例如对于着色,您可以执行以下操作:

只需添加以下行:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

预习: 在此处输入图片说明

这是我的首选颜色。您可以通过更改ANSI颜色代码m(例如34m)来自定义提示颜色的每个部分。

ANSI颜色代码列表:

  • 黑色:30m
  • 红色:31m
  • 绿色:32m
  • 黄色:33m
  • 蓝色:34m
  • 紫色:35m
  • 青色:36m
  • 白色:37m

0

这些答案都没有帮助我了解即时定制的工作原理。这是我从几个小时的搜索中收集的信息,这些搜索是围绕各种不同的论坛,堆栈,Wiki等进行的:

找到提示

nano ~/.bashrc

搜索您bashrcPS1,手动或使用Alt + F键。这是第一个bash提示,当您输入命令时会看到。PS[2-4]也存在,但很少使用。

定义颜色

PS1在行上方,添加以下颜色定义:

# Color Variables
c1='\[\033[0;30m\]' # Non-bold color 1
C1='\[\033[1;30m\]' # Bold color 1
c2='\[\033[0;31m\]' # Non-bold color 2
C2='\[\033[1;31m\]' # Bold color 2
c3='\[\033[0;32m\]' # Non-bold color 3
C3='\[\033[1;32m\]' # Bold color 3
c4='\[\033[0;33m\]' # Non-bold color 4
C4='\[\033[1;33m\]' # Bold color 4
c5='\[\033[0;34m\]' # Non-bold color 5
C5='\[\033[1;34m\]' # Bold color 5
c6='\[\033[0;35m\]' # Non-bold color 6
C6='\[\033[1;35m\]' # Bold color 6
c7='\[\033[0;36m\]' # Non-bold color 7
C7='\[\033[1;36m\]' # Bold color 7
c8='\[\033[0;37m\]' # Non-bold color 8
C8='\[\033[1;37m\]' # Bold color 8
NC='\[\033[0m\]'    # Back to default color

配置颜色

现在,在(可能是图形的)终端中,您应该具有一些自定义选项。例如,我正在使用KDE的KonsoleSettings > Edit Current Profile... > Appearance > Edit...显示此定制界面:

Konsole颜色定制

现在将它们更改为您喜欢的任何颜色。您的前景色是您的默认颜色,颜色1〜8是您定义的可以选择的颜色。并不是说定义是基于0的,而此定制和变量是基于1的。

在提示中使用颜色

对于默认提示,我有:

PS1="[\u@\h \W]\$ "

\u是您的ü sername,\h是你的ħ ostname,\WW¯¯你在这里(其目录),并且\$是提示啄(#当用户id = 0 [根])。

您可以通过$c1在要更改的颜色前面添加,$ c2`等来自定义此颜色。例如,我有:

PS1="$c2[$C8\u$c2@$C7\h $C6\W$c2]$C2\$$NC "

结果是:

我的bash提示

注意:您需要NC在最后使用,将其重置为默认颜色,否则,提示(您的输入)之后的所有内容将是提示中的最后一种颜色。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.