GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Shell:toma el control de PS1, PS2, PS3, PS4 y PROMPT_COMMAND

Tu interacción con Linux Bash shell será muy agradable si usas PS1, PS2, PS3, PS4 y PROMPT_COMMAND con eficacia. PS significa pronta declaración. Este artículo le ayudará a comenzar con las variables de entorno del símbolo del sistema de Linux mediante ejemplos sencillos.

1. PS1:aviso de interacción predeterminado

El indicador interactivo predeterminado en su Linux se puede modificar como se muestra a continuación para que sea útil e informativo. En el siguiente ejemplo, la PS1 predeterminada era "\s-\v\$", que muestra el nombre del shell y el número de versión. Cambiemos este comportamiento predeterminado para mostrar el nombre de usuario, el nombre de host y el nombre del directorio de trabajo actual como se muestra a continuación.

-bash-3.2$  export PS1="\u@\h \w> "

ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
[Note: Prompt changed to "username@hostname current-dir>" format] 

En este ejemplo se utilizan los siguientes códigos de PS1:

  • \u – Nombre de usuario
  • \h – Nombre de host
  • \n – Ruta completa del directorio actual. Tenga en cuenta que cuando esté en el directorio de inicio, esto se mostrará solo ~ como se muestra arriba
  • Tenga en cuenta que hay un espacio al final en el valor de PS1. Personalmente, prefiero un espacio al final del mensaje para una mejor legibilidad.

Haga que esta configuración sea permanente agregando export PS1=”\u@\h \w> ” a .bash_profile (o) .bashrc como se muestra a continuación.

ramesh@dev-db ~> vi ~/.bash_profile (or)
ramesh@dev-db ~> vi ~/.bashrc
[Note: Add export PS1="\u@\h \w> " to one of the above files]

En la próxima publicación, escribiré sobre varios ejemplos prácticos del uso de PS1 en detalle.

2. PS2:aviso interactivo de continuación

Un comando unix muy largo se puede dividir en varias líneas dando \ al final de la línea. El indicador interactivo predeterminado para un comando de varias líneas es ">". Cambiemos este comportamiento predeterminado para mostrar "continuar->" usando la variable de entorno PS2 como se muestra a continuación.

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
> --key_buffer_size=512M --sort_buffer_size=512M \
> --read_buffer_size=4M --write_buffer_size=4M \
> /var/lib/mysql/bugs/*.MYI
[Note: This uses the default ">" for continuation prompt]

ramesh@dev-db ~> export PS2="continue-> "

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
continue-> --key_buffer_size=512M --sort_buffer_size=512M \
continue-> --read_buffer_size=4M --write_buffer_size=4M \
continue-> /var/lib/mysql/bugs/*.MYI
[Note: This uses the modified "continue-> " for continuation prompt]

Lo encontré muy útil y fácil de leer, cuando divido mis comandos largos en varias líneas usando \. También he visto a otros a los que no les gusta dividir los comandos largos. ¿Cuál es tu preferencia? ¿Te gusta dividir los comandos largos en varias líneas?

3. PS3:solicitud utilizada por "seleccionar" dentro del script de shell

Puede definir un aviso personalizado para el ciclo de selección dentro de un script de shell, usando la variable de entorno de PS3, como se explica a continuación.

Script de shell y salida SIN PS3:

ramesh@dev-db ~> cat ps3.sh

select i in mon tue wed exit
do
  case $i in
    mon) echo "Monday";;
    tue) echo "Tuesday";;
    wed) echo "Wednesday";;
    exit) exit;;
  esac
done

ramesh@dev-db ~> ./ps3.sh

1) mon
2) tue
3) wed
4) exit
#? 1
Monday
#? 4
[Note: This displays the default "#?" for select command prompt]


Script de shell y salida CON PS3:

ramesh@dev-db ~> cat ps3.sh

PS3="Select a day (1-4): "
select i in mon tue wed exit
do
  case $i in
    mon) echo "Monday";;
    tue) echo "Tuesday";;
    wed) echo "Wednesday";;
    exit) exit;;
  esac
done

ramesh@dev-db ~> ./ps3.sh
1) mon
2) tue
3) wed
4) exit
Select a day (1-4): 1
Monday
Select a day (1-4): 4
[Note: This displays the modified "Select a day (1-4): "
       for select command prompt]

4. PS4:utilizado por "set -x" para prefijar la salida de seguimiento

La variable de shell de PS4 define el aviso que se muestra cuando ejecuta un script de shell en modo de depuración, como se muestra a continuación.

Script y salida de Shell SIN PS4:

ramesh@dev-db ~> cat ps4.sh

set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh

++ echo 'PS4 demo script'
PS4 demo script
++ ls -l /etc/
++ wc -l
243
++ du -sh /home/ramesh
48K     /home/ramesh
[Note: This displays the default "++" while tracing the output using set -x]


Script de shell y salida CON PS4:
La PS4 definida a continuación en ps4.sh tiene los siguientes dos códigos:

  • $0:indica el nombre del script
  • $LINENO:muestra el número de línea actual dentro del script
ramesh@dev-db ~> cat ps4.sh

export PS4='$0.$LINENO+ '
set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh
../ps4.sh.3+ echo 'PS4 demo script'
PS4 demo script
../ps4.sh.4+ ls -l /etc/
../ps4.sh.4+ wc -l
243
../ps4.sh.5+ du -sh /home/ramesh
48K     /home/ramesh
[Note: This displays the modified "{script-name}.{line-number}+"
       while tracing the output using set -x]

5. PROMPT_COMMAND

Bash shell ejecuta el contenido de PROMPT_COMMAND justo antes de mostrar la variable PS1.

ramesh@dev-db ~> export PROMPT_COMMAND="date +%k:%m:%S"
22:08:42
ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on different lines]

Si desea mostrar el valor de PROMPT_COMMAND en la misma línea que la PS1, use echo -n como se muestra a continuación.

ramesh@dev-db ~> export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"
[22:08:51]ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on the same line]

Si le gustó este artículo, márquelo como favorito en del.icio.us y Stumble utilizando el enlace proporcionado a continuación, en la sección "¿Qué sigue?".


Linux
  1. Personalización del shell Bash

  2. Bash Shell:toma el control de PS1, PS2, PS3, PS4 y PROMPT_COMMAND

  3. Bash Shell Script:busque una bandera y tome su valor

  4. Alcance variable para scripts y funciones bash shell en el script

  5. Diferencia entre comandos en bash script y comandos en terminal

Bash-it:Marco Bash para controlar sus scripts y alias

.bashrc frente a .bash_profile

Bash Beginner Series #1:Cree y ejecute su primer script de Bash Shell

Diferencia entre comillas simples y dobles en Bash Shell

Bash Scripting:cómo generar y formatear texto en Linux Shell

Bash Shell PS1:10 ejemplos para hacer que su Linux sea tan rápido como Angelina Jolie