2008-09-19 80 views
116

你最喜欢的Bash提示符中有些元素是什么?你最喜欢的Bash提示是什么?

我喜欢有最新命令的成功与否的指标,像这样(在.bashrc):

function exitstatus { 

    EXITSTATUS="$?" 
    BOLD="\[\033[1m\]" 
    RED="\[\033[1;31m\]" 
    GREEN="\[\e[32;1m\]" 
    BLUE="\[\e[34;1m\]" 
    OFF="\[\033[m\]" 

    PROMPT="[\[email protected]\h ${BLUE}\W${OFF}" 

    if [ "${EXITSTATUS}" -eq 0 ] 
    then 
     PS1="${PROMPT} ${BOLD}${GREEN}:)${OFF} ]\$ " 
    else 
     PS1="${PROMPT} ${BOLD}${RED}:(${OFF} ]\$ " 
    fi 

    PS2="${BOLD}>${OFF} " 
} 

PROMPT_COMMAND=exitstatus 
+2

使用同义反复的人“可能会或可能不会”,这促使我来砸他们;) – Dan 2008-09-19 19:58:15

+0

的问题是有用的,它不应该与答案合并。 – dhill 2012-02-10 14:05:58

+13

有时候我想知道。一个40K的观点,72个upvotes,50个最喜欢的问题,其接受的答案有58个upvotes,以及“BASH best PS1”的最高谷歌成绩,已被封闭为“Not Constructive”...是的,那么好吧。 (注意,我知道SO的规则,但规则生成例外,那么他们呢?) – 2015-01-12 22:30:42

回答

16

这里是我的。

# this prompt will show the hostname in green if the last command returned 0, 
# otherwise it will be red. 
PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ 

看起来像这样'笔记本电脑'是绿色的,其余的默认终端前景,当然。

laptop:~/bin 
$ 
+2

如果在美元提示符之前有新行,但是如果要删除该行,则需要使用\\ [`和`\\``将所有非打印控制字符括起来。否则,长命令将无法正确包装。 – dreeves 2010-06-20 02:28:26

3

我的提示:

[周五9月19日上午10时33分]
[NAT @谷〜] $

#################################3 
## File used for defining $PS1 

bash_prompt_command() { 
# How many characters of the $PWD should be kept 
local pwdmaxlen=25 
# Indicate that there has been dir truncation 
local trunc_symbol=".." 
local dir=${PWD##*/} 
pwdmaxlen=$(((pwdmaxlen < ${#dir}) ? ${#dir} : pwdmaxlen)) 
NEW_PWD=${PWD/#$HOME/\~} 
local pwdoffset=$((${#NEW_PWD} - pwdmaxlen)) 
if [ ${pwdoffset} -gt "0" ] 
then 
    NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen} 
    NEW_PWD=${trunc_symbol}/${NEW_PWD#*/} 
fi 
} 

bash_prompt() { 
local NONE="\[\033[0m\]" # unsets color to term's fg color 

# regular colors 
local K="\[\033[0;30m\]" # black 
local R="\[\033[0;31m\]" # red 
local G="\[\033[0;32m\]" # green 
local Y="\[\033[0;33m\]" # yellow 
local B="\[\033[0;34m\]" # blue 
local M="\[\033[0;35m\]" # magenta 
local C="\[\033[0;36m\]" # cyan 
local W="\[\033[0;37m\]" # white 

# empahsized (bolded) colors 
local EMK="\[\033[1;30m\]" 
local EMR="\[\033[1;31m\]" 
local EMG="\[\033[1;32m\]" 
local EMY="\[\033[1;33m\]" 
local EMB="\[\033[1;34m\]" 
local EMM="\[\033[1;35m\]" 
local EMC="\[\033[1;36m\]" 
local EMW="\[\033[1;37m\]" 

# background colors 
local BGK="\[\033[40m\]" 
local BGR="\[\033[41m\]" 
local BGG="\[\033[42m\]" 
local BGY="\[\033[43m\]" 
local BGB="\[\033[44m\]" 
local BGM="\[\033[45m\]" 
local BGC="\[\033[46m\]" 
local BGW="\[\033[47m\]" 

local UC=$W     # user's color 
[ $UID -eq "0" ] && UC=$R # root's color 

# without colors: PS1="[\[email protected]\h \${NEW_PWD}]\\$ " 
# extra backslash in front of \$ to make bash colorize the prompt 

#Nat's Colored Prompt 
PS1="${EMK}\n[${EMR}\d ${EMR}\@${EMK}] \n${EMK} [${UC}\u${EMK}@${UC}\h ${EMB}\${NEW_PWD}${EMK}]${UC}\\$ ${NONE}" 


} 

PROMPT_COMMAND=bash_prompt_command 
bash_prompt 
unset bash_prompt  
0
PS1="\n\e[30;1mUSER (\e[0m\e[33;1m\w\e[0m\e[30;1m)\e[0m\e[33;33m\n$ \e[0m" 
2

我用Glandium.org的“Adding some VCS information in bash prompt的定制版本“提示。我所做的最重要的事情是将VCS收集位分成一个单独的脚本。

此提示非常好,因为它提供了大量关于我正在处理的项目的信息,我需要了解有关基于VCS信息的项目。我还定制了我的显示命令返回结果,屏幕窗口号,用户和机器名称以及当前时间。它很长(42个字符或更多),但我使用宽端子,所以这不是什么大问题。

举例来说,我现在的提示(位编辑后)看起来像:

[0-1][email protected](g:proj1[topic/fix-123]app)[10:50]|$ 

这意味着最后一个命令有了结果为0,在屏幕窗口1,迈克尔登录到HAL。当前目录是proj1的Git工作目录,在上午10点50分目录应用程序中的分支主题/ fix-123内。以常规用户身份登录。如果有人想要我的自定义脚本,请让我知道...我会很高兴把它放在这里或其他地方很容易访问。

+0

优秀。正是我在找什么。你能上传吗? – demonkoryu 2011-01-20 08:17:04

22

in。bashrc中:

PS1='\$ ' 

(H/T @bitmask用于编辑)

0

我想保持它的(相对)简单:

用户名@主机名:/充满/路径>

PS1='\[email protected]\h:\w> ' 
export PS1 
2

我有这个作为我的很长一段时间的bash提示:

 
PS1="(\d \t) (\[email protected]\h:\w)\nbash> " 
export PS1 
0

矿,在家里,是非常简单的:

[[email protected]:/full/CWD]$

在工作中,我们的生产和测试用户环境“概念,并及时为

(env;sub-env) [[email protected]:/full/CWD]$
18

因为我一跳在我的开发工作站,开发服务器和临时环境之间,我已经在提示中用下面的代码片段着色了机器名,以便在我看着显示器上的术语海时给出一个可视指示器他们连接了哪些机器:

# Color the hostname 
if [ $HOSTNAME = 'claudius' ]; then 
    export HOST_COLOR="\[\033[1;36m\]" 
fi 
if [ $HOSTNAME = 'drooble' ]; then 
    export HOST_COLOR="\[\033[1;34m\]" 
fi 
if [ $HOSTNAME = 'davinci' ]; then 
    export HOST_COLOR="\[\033[1;31m\]" 
fi 

# Color the colon red if root 
COLON_COLOR='0m' 
if [ ${UID} -eq 0 ]; then 
    COLON_COLOR='1;31m' 
fi 

然后,与彩色主机名的全PS1变量,结肠癌(红色如果根,即,须藤-s)和完整的路径:

PS1=`echo -ne "$HOST_COLOR\h\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "` 
0

我喜欢这个:

\[\033[33m\][\[email protected]\[\033[1;31m\]\h]\]\033[0m {\W}\n\033[1;34m\]\w\]\033[0m > 

它把

[name]@[hostname] 
[pwd] > 

[name]黄色,[hostname]红色和[pwd]在蓝色

1

矿:

function prompt_err { 
    if test "$?" -eq 0; then PS1=': \W$; '; else PS1=': \W [ERROR#$?]$; '; fi 
} 
PROMPT_COMMAND=prompt_err 
PS2=' ' 

请问:

  • 显示目录名
  • 允许对整条生产线复制/粘贴到另一个shell重新执行相同的命令,忽视提示
  • 如果以前的命令退出状态不是0,则打印一个可见的错误状态码
  • 次提示符的空间,以允许复制/粘贴
2

我修改了原来的海报的例子了一下:

function exitstatus { 

    EXITSTATUS="$?" 
    BOLD="\[\033[1m\]" 
    RED="\[\033[0;31m\]" 
    GREEN="\[\e[0;32m\]" 
    BLUE="\[\e[34m\]" 
    OFF="\[\033[m\]" 

    HOST="\h" 
    USER="\u" 
    DIR="\w" 
    NEWLINE="\n" 
    DATE="\d" 
    TIME="\t" 

    PROMPT="\[\033]0;${USER}@${HOST}: \w\007\n${RED}${TIME} ${DATE} [${USER}@${HOST}:[${BLUE}\w${RED}]" 

    if [ "${EXITSTATUS}" -eq 0 ] 
    then 
     PS1="${PROMPT} [${GREEN}${EXITSTATUS}${RED}]${OFF}\n$ " 
    else 
     PS1="${PROMPT} [${BOLD}${EXITSTATUS}${RED}]${OFF}\n$ " 
    fi 

    PS2="${BOLD}>${OFF} " 
} 

PROMPT_COMMAND=exitstatus 
10

我喜欢的提示,告诉大约多久以前的命令把执行。 像这样:

0:007 /home/jcl 0$ sleep 1
1:012 /home/jcl 0$

它可以这样实现:

bold='\[\e[1m\]' 
plain='\[\e[0m\]' 

set_begin() 
{ 
    if [ -z "$begin" ] 
    then 
    begin="$(date +"%s %N")" 
    fi 
} 

calc_elapsed() 
{ 
    read begin_s begin_ns <<< "$begin" 
    begin_ns="${begin_ns##+(0)}" 
    # PENDING - date takes about 11ms, maybe could do better by digging in 
    # /proc/$$. 
    read end_s end_ns <<< $(date +"%s %N") 
    end_ns="${end_ns##+(0)}" 
    local s=$((end_s - begin_s)) 
    local ms 
    if [ "$end_ns" -ge "$begin_ns" ] 
    then 
    ms=$(((end_ns - begin_ns)/1000000)) 
    else 
    s=$((s - 1)) 
    ms=$(((1000000000 + end_ns - begin_ns)/1000000)) 
    fi 
    elapsed="$(printf " %2u:%03u" $s $ms)" 
    if [ "$s" -ge 300 ] 
    then 
    elapsed="$elapsed [$(human_time $s)]" 
    fi 
} 



human_time() 
{ 
    local s=$1 
    local days=$((s/(60*60*24))) 
    s=$((s - days*60*60*24)) 
    local hours=$((s/(60*60))) 
    s=$((s - hours*60*60)) 
    local min=$((s/60)) 
    if [ "$days" != 0 ] 
    then 
    local day_string="${days}d " 
    fi 
    printf "$day_string%02d:%02d\n" $hours $min 
} 

timer_prompt() 
{ 
    status=$? 
    local size=16 
    calc_elapsed 
    if [ "${#PWD}" -gt $size ] 
    then 
    pwd_string="${PWD: -$size}" 
    else 
    pwd_string="$(printf "%${size}s" $PWD)" 
    fi 
    PS1="$bold$elapsed $pwd_string $status\\$ $plain" 
    begin= 
} 

set_begin 
trap set_begin DEBUG 
PROMPT_COMMAND=timer_prompt 
相关问题