GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Shell :prenez le contrôle de PS1, PS2, PS3, PS4 et PROMPT_COMMAND

Votre interaction avec le shell Linux Bash deviendra très agréable si vous utilisez PS1, PS2, PS3, PS4 et PROMPT_COMMAND efficacement. PS signifie déclaration rapide. Cet article vous donnera un coup de pouce sur les variables d'environnement de l'invite de commande Linux à l'aide d'exemples simples.

1. PS1 - Invite d'interaction par défaut

L'invite interactive par défaut sur votre Linux peut être modifiée comme indiqué ci-dessous pour quelque chose d'utile et d'informatif. Dans l'exemple suivant, le PS1 par défaut était "\s-\v\$", qui affiche le nom du shell et le numéro de version. Modifions ce comportement par défaut pour afficher le nom d'utilisateur, le nom d'hôte et le nom du répertoire de travail actuel, comme indiqué ci-dessous.

-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] 

Les codes PS1 suivants sont utilisés dans cet exemple :

  • \u – Nom d'utilisateur
  • \h – Nom d'hôte
  • \w – Chemin d'accès complet du répertoire courant. Veuillez noter que lorsque vous êtes dans le répertoire personnel, cela n'affichera que ~ comme indiqué ci-dessus
  • Notez qu'il y a un espace à la fin de la valeur de PS1. Personnellement, je préfère un espace à la fin de l'invite pour une meilleure lisibilité.

Rendez ce paramètre permanent en ajoutant export PS1=”\u@\h \w> ” à .bash_profile (ou) .bashrc comme indiqué ci-dessous.

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]

Dans le prochain article, j'écrirai en détail sur plusieurs exemples pratiques d'utilisation de la PS1.

2. PS2 – Invite interactive de continuation

Une commande unix très longue peut être décomposée en plusieurs lignes en donnant \ à la fin de la ligne. L'invite interactive par défaut pour une commande multiligne est ">". Modifions ce comportement par défaut pour afficher "continue->" en utilisant la variable d'environnement PS2 comme indiqué ci-dessous.

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]

Je l'ai trouvé très utile et facile à lire, lorsque je divise mes longues commandes en plusieurs lignes à l'aide de \. J'en ai aussi vu d'autres qui n'aiment pas briser les longues commandes. Quelle est votre préférence ? Aimez-vous diviser les longues commandes en plusieurs lignes ?

3. PS3 - Invite utilisée par "select" dans le script shell

Vous pouvez définir une invite personnalisée pour la boucle de sélection dans un script shell, à l'aide de la variable d'environnement PS3, comme expliqué ci-dessous.

Script shell et sortie SANS 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 shell et sortie AVEC 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 - Utilisé par "set -x" pour préfixer la sortie de traçage

La variable shell PS4 définit l'invite qui s'affiche lorsque vous exécutez un script shell en mode débogage, comme indiqué ci-dessous.

Script shell et sortie SANS 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 shell et sortie AVEC PS4 :
La PS4 définie ci-dessous dans le ps4.sh a les deux codes suivants :

  • $0 - indique le nom du script
  • $LINENO – affiche le numéro de ligne actuel dans le 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

Le shell Bash exécute le contenu de PROMPT_COMMAND juste avant d'afficher 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 vous souhaitez afficher la valeur de PROMPT_COMMAND dans la même ligne que la PS1, utilisez l'écho -n comme indiqué ci-dessous.

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 vous avez aimé cet article, veuillez le mettre en signet sur del.icio.us et Stumble en utilisant le lien fourni ci-dessous, sous la section "Et ensuite ?".


Linux
  1. Bash Shell :prenez le contrôle de PS1, PS2, PS3, PS4 et PROMPT_COMMAND

  2. Bash Shell Script - Recherchez un indicateur et saisissez sa valeur

  3. Portée variable pour les scripts shell bash et les fonctions dans le script

  4. Comportement des tableaux dans les scripts bash et le shell zsh (index de début 0 ou 1 ?)

  5. Quelle est la différence entre &> et >&en bash ?

Bash-it - Framework Bash pour contrôler vos scripts et alias

.bashrc contre .bash_profile

Bash Beginner Series #1 :Créez et exécutez votre premier script shell Bash

Différence entre les guillemets simples et doubles dans Bash Shell

Bash Scripting :comment générer et formater du texte sur le shell Linux

Bash Shell PS1 :10 exemples pour rendre votre invite Linux comme Angelina Jolie