tutorial tiene subsistema script para instaladas español distribuciones comandos comando linux bash prompt

linux - tiene - ¿Cuál es tu guía favorita de Bash?



shell script (14)

Aquí está el mío.

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

Parece que esta ''computadora portátil'' es verde y el resto es primer plano de la terminal por defecto, por supuesto.

laptop:~/bin $

¿Cuáles son algunos elementos en tu prompt favorito de Bash?

Me gusta tener un indicador del éxito del comando más reciente, como por ejemplo (en .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


Como salto entre varias máquinas diferentes durante todo el día, mi estación de trabajo dev, servidores de desarrollo y entornos de ensayo, he tomado la coloración del nombre de la máquina en mis instrucciones 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

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

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



El mío, en casa, es bastante simple:

[user@machinename:/full/CWD]$

En el trabajo, tenemos un concepto de ''entornos'' para los usuarios de producción y prueba, y el mensaje es

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


He tenido esto como mi sugerencia de bash durante mucho tiempo:

PS1="(/d /t) (/u@/h:/w)/nbash> " export PS1


Me gusta el aviso para decir aproximadamente cuánto tiempo tardó en ejecutarse el comando anterior. Me gusta esto:

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

Se puede implementar de esta manera:

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


Me gusta esto:

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

pone

[name]@[hostname] [pwd] >

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


Me gusta mantenerlo (relativamente) simple:

username @ hostname: / full / path>

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


Mi mensaje:

[Vie 19 de septiembre a las 10:33 a.m.]
[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


Modifiqué un poco el ejemplo del póster original:

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


Utilizo una versión personalizada de la solicitud " Agregar información de VCS en el prompt de bash " de Glandium.org. 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 brinda 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 solicitud actual (después de un poco de edición) se ve así:

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

Lo que significa que el último comando tuvo un resultado de 0, en la ventana de pantalla 1, cuando Michael se conectó a 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 normal.

Por cierto, si alguien quisiera mi guión personalizado, por favor avíseme ... Me complacerá ponerlo aquí o en otro lugar de fácil acceso.


en .bashrc:

PS1=''/$ ''

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


mía:

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

Hace:

  • mostrar el nombre del directorio
  • permite copiar / pegar toda la línea en otro shell para volver a ejecutar el mismo comando, ignorando el aviso
  • si el estado de salida del comando anterior no era 0, imprima un ERROR visible con código de estado
  • prompt secundario son espacios para permitir copiar / pegar

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