2008-09-19 8 views
116

¿Cuáles son algunos elementos en su indicador de Bash favorito?¿Cuál es tu indicación favorita de Bash?

me gusta tener un indicador del éxito de la orden más reciente, al igual que (en .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

Una persona que utiliza el tautología "puede o no" se me impulsaron a golpearlos;) – Dan

+0

La pregunta es útil , simplemente no debería fusionarse con la respuesta. – dhill

+13

Me pregunto sobre SO a veces. Una pregunta con 40,000 vistas, 72 votos hacia arriba, 50 favoritos, cuya respuesta aceptada tiene 58 votaciones ascendentes, y la mejor puntuación de Google para "Mejor PS1 de BASH", ha sido cerrada como "No constructiva" ... Sí, vale, entonces. (Nota, sé las reglas de SO, pero las reglas engendraron excepciones, ¿no es así?) –

Respuesta

16

Esta es la mía.

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

se parece a esto 'portátil' es verde y el resto es plano terminal por defecto, por supuesto.

laptop:~/bin 
$ 
+2

Esto es discutible si tiene esa línea nueva antes del símbolo del dólar, pero si desea eliminarla, debe rodear todos los caracteres de control que no se imprimen con '\\ [' y '\\]'. De lo contrario, los comandos largos no se ajustarán correctamente. – dreeves

3

Mi mensaje:

[Fri Sep 19 de 10:33]
[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="[\[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

utilizo una versión personalizada de Glandium.org de "Adding some VCS information in bash prompt "pronto. Lo más grande que hice fue sacar los bits de la colección VCS en un script separado.

Este mensaje es excelente porque me da mucha información que necesito saber sobre el proyecto actual en el que estoy trabajando, basado en información de VCS. También he personalizado el mío para mostrar resultados de devolución de comandos, número de ventana de pantalla, nombres de usuario y máquina, y la hora actual. Es bastante largo (42 caracteres o más) pero uso terminales anchos, así que no es gran cosa.

Por ejemplo, mi indicador actual (después de un poco de edición) se parece a:

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

Lo que significa que la última orden tuvo un resultado de 0, en la ventana de la pantalla 1, como Michael registra en hal. El directorio actual es un directorio de trabajo de Git para proj1, dentro del tema de rama/fix-123 en la aplicación de directorio a las 10:50 a.m. Iniciado sesión como un usuario regular.

BTW, si alguien desea mi script personalizado, por favor, hágamelo saber ... con gusto lo pondré aquí o en otro lugar de fácil acceso.

+0

Excelente. Exactamente lo que estoy buscando. ¿Podrías subirlo? – demonkoryu

22

en.bashrc:

PS1='\$ ' 

(H/T @bitmask para la edición)

+4

siempre es bueno ver la opción minimalista mencionada. Personalmente, no podía soportarlo, pero te hace tomar un momento para reflexionar sobre su simplicidad :) – wprl

+10

¿Cómo puede alguien trabajar sin ver la ubicación actual en su mensaje? : o – ThiefMaster

+7

Recuerdas o 'pwd' – Gunchars

0

me gusta que sea (relativamente) simple:

usuario @ máquina:/full/path>

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

que he tenido esto como mi indicador bash durante mucho tiempo:

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

mina, en casa, es bastante simple:

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

En el trabajo, tenemos un concepto de 'ambientes' para los usuarios de producción y de prueba, y el símbolo es

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

Desde I hop entre varias máquinas diferentes durante todo el día, mi estación de trabajo de desarrollo, servidores de desarrollo y entornos de ensayo, tomé colorear el nombre de la máquina en mis avisos con el siguiente fragmento para dar un indicador visual cuando miro el mar de términos en mis monitores a qué máquinas están conectadas:

# 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 

Entonces, la variable PS1 completa con el nombre de host de color, dos puntos (rojo si la raíz, es decir, sudo -s) y la ruta completa:

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

me gusta esto:

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

se pone

[name]@[hostname] 
[pwd] > 

con [name] en amarillo, [hostname] en rojo y [pwd] en azul

1

mía:

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

Hace:

  • muestran el nombre del directorio
  • permiten copiar/pegar toda la línea en otra línea de comandos para volver a ejecutar el mismo comando, haciendo caso omiso el mensaje
  • si el estado de salida del comando anterior no era 0, imprime un ERROR visible con el código de estado
  • indicador secundario son espacios para permitir copiar/pegar
2

he modificado el ejemplo de su creador original un poco:

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 
+0

Tenga en cuenta que en StackOverflow, "primero" depende de elementos como recuento de votos positivos u orden especificada por el usuario, ya que la publicación superior puede cambiar. –

+0

He editado la publicación para aclarar la intención. –

10

me gusta el símbolo para contar más o menos cuánto tiempo comando anterior se llevó a ejecutar. De esta manera:

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

Se puede implementar como esto:

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 
+1

Aquí hay un hilo sobre cómo mostrar los tiempos de ejecución en las indicaciones Bash: http://stackoverflow.com/questions/1862510/how-can-thelast-commands-wall-time-be-put-in-the-bash-prompt/ 2732282 – willdye

Cuestiones relacionadas