你最喜欢的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="[\u@\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 

在“ Bash用户:你有什么对你的$ PS1? ”的大胆的例子。

由于我整天在许多不同的机器之间跳跃,我的开发工作站,开发服务器和临时环境,我在下面的代码片段中用我的提示着色了机器名,给我一个视觉指示器,当我看着术语的海洋在我的显示器上连接了哪些机器:

 # 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 

然后,完整的PS1variables与彩色主机名,冒号(红色,如果根,即sudo -s)和完整path:

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

在.bashrc中:

 PS1='\$ ' 

(用于编辑的H / T @bitmask)

这是我的。

 # 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\$ 

看起来这个“笔记本电脑”是绿色的,其余的是默认terminal前景,当然。

 laptop:~/bin $ 

我喜欢这个提示,大概告诉上一个命令执行的时间。 喜欢这个:

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 

我的提示:

[星期五9月19日10:33 AM]
[nat @ Forge〜] $

 #################################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="[\u@\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 

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

 PS1 =“(\ d \ t)(\ u @ \ h:\ w)\ n”
导出PS1

我修改了第一个有点:

 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 

我使用Glandium.org的“ 在bash提示符下添加一些VCS信息 ”的自定义版本提示。 我所做的最重要的事情是将VCS收集位分成一个单独的脚本。

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

例如,我当前的提示(经过一些编辑)看起来像:

 [0-1]michael@hal(g:proj1[topic/fix-123]app)[10:50]|$ 

这意味着最后一个命令的结果是0,在屏幕窗口1中,michaellogin到hal。 当前目录是proj1的Git工作目录,上午10点50分目录应用程序中的分支主题/ fix-123。 以普通用户身份login。

顺便说一句,如果有人想要我的定制脚本,请让我知道…我会很乐意把它放在这里或其他地方很容易访问。

矿:

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

请问:

  • 显示目录名称
  • 允许将整行复制/粘贴到另一个shell中以重新执行相同的命令,而忽略提示
  • 如果前面的命令退出状态不是0,则打印一个可见的ERROR和状态码
  • 辅助提示符是允许复制/粘贴的空格

我喜欢保持它(相对)简单:

用户名@主机名:/全/path>

 PS1='\u@\h:\w> ' export PS1 

我的家在家里很简单:

  [用户名@计算机名:/全/ CWD] $ 

在工作中,我们对生产和testing用户有一个“环境”的概念,提示是

  (env; sub-env)[user @ machinename:/ full / CWD] $ 

我喜欢这个:

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

它把

 [name]@[hostname] [pwd] > 

[name]为黄色, [hostname]为红色, [pwd]为蓝色

 PS1="\n\e[30;1mUSER ( \e[0m\e[33;1m\w\e[0m\e[30;1m )\e[0m\e[33;33m\n$ \e[0m"