Dans l'article précédent, nous avons discuté des variables d'environnement Linux PS[1-4] et PROMPT_COMMAND. S'il est utilisé efficacement, PS1 peut fournir des informations précieuses directement sur l'invite de commande.
Dans Tomb Raider, Angelina Jolie a tous les gadgets et toutes les armes à portée de main pour résoudre le mystère avec style. Alors que le gadget et le style d'Angelina Jolie sont difficiles à égaler, essayons au moins de rendre la bonne vieille invite Linux très fonctionnelle et élégante en utilisant les 10 exemples fournis dans cet article.
1. Afficher le nom d'utilisateur, le nom d'hôte et le répertoire de travail actuel dans l'invite
La PS1 dans cet exemple affiche les trois informations suivantes dans l'invite :
- \u – Nom d'utilisateur
- \h – Nom d'hôte
- \w – Chemin complet du répertoire de travail courant
-bash-3.2$ export PS1="\u@\h \w> "
ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
2. Afficher l'heure actuelle dans l'invite
Dans la variable d'environnement PS1, vous pouvez directement exécuter n'importe quelle commande Linux, en spécifiant au format $(linux_command). Dans l'exemple suivant, la commande $(date) est exécutée pour afficher l'heure actuelle dans l'invite.
ramesh@dev-db ~> export PS1="\u@\h [\$(date +%k:%M:%S)]> "
ramesh@dev-db [11:09:56]>
Vous pouvez également utiliser \t pour afficher l'heure actuelle au format hh:mm:ss comme indiqué ci-dessous :
ramesh@dev-db ~> export PS1="\u@\h [\t]> "
ramesh@dev-db [12:42:55]>
Vous pouvez également utiliser \@ pour afficher l'heure actuelle au format 12 heures am/pm comme indiqué ci-dessous :
ramesh@dev-db ~> export PS1="[\@] \u@\h> "
[04:12 PM] ramesh@dev-db>
3. Afficher la sortie de n'importe quelle commande Linux dans l'invite
Vous pouvez afficher la sortie de n'importe quelle commande Linux dans l'invite. L'exemple suivant affiche trois éléments séparés par | (tuyau) dans l'invite de commande :
- \! : Le numéro d'historique de la commande
- \h : nom d'hôte
- $kernel_version : La sortie de la commande uname -r de la variable $kernel_version
- \$ ? : Statut de la dernière commande
ramesh@dev-db ~> kernel_version=$(uname -r)
ramesh@dev-db ~> export PS1="\!|\h|$kernel_version|\$?> "
473|dev-db|2.6.25-14.fc9.i686|0>
4. Changer la couleur de premier plan de l'invite
Afficher l'invite en bleu, ainsi que les informations sur le nom d'utilisateur, l'hôte et le répertoire actuel
$ export PS1="\e[0;34m\u@\h \w> \e[m" [Note: This is for light blue prompt] $ export PS1="\e[1;34m\u@\h \w> \e[m" [Note: This is for dark blue prompt]
- \e[ - Indique le début de l'invite de couleur
- x;ym – Indique le code couleur. Utilisez les valeurs de code couleur mentionnées ci-dessous.
- \e[m - indique la fin de l'invite de couleur
Tableau des codes de couleur :
Black 0;30 Blue 0;34 Green 0;32 Cyan 0;36 Red 0;31 Purple 0;35 Brown 0;33 [Note: Replace 0 with 1 for dark color]
Rendez le changement de couleur permanent en ajoutant les lignes suivantes à .bash_profile ou .bashrc
STARTCOLOR='\e[0;34m';
ENDCOLOR="\e[0m"
export PS1="$STARTCOLOR\u@\h \w> $ENDCOLOR"
5. Changer la couleur de fond de l'invite
Modifiez la couleur d'arrière-plan en spécifiant \e[{code}m dans l'invite PS1, comme indiqué ci-dessous.
$ export PS1="\e[47m\u@\h \w> \e[m"
[Note: This is for Light Gray background]
Combinaison d'arrière-plan et de premier plan
export PS1="\e[0;34m\e[47m\u@\h \w> \e[m"
[Note: This is for Light Blue foreground and Light Gray background]
Ajoutez ce qui suit au .bash_profile ou .bashrc pour rendre permanente la couleur d'arrière-plan et de premier plan ci-dessus.
STARTFGCOLOR='\e[0;34m'; STARTBGCOLOR="\e[47m" ENDCOLOR="\e[0m" export PS1="$STARTFGCOLOR$STARTBGCOLOR\u@\h \w> $ENDCOLOR"
Amusez-vous en utilisant la couleur de fond suivante et choisissez celle qui vous convient :
- \e[40m
- \e[41m
- \e[42m
- \e[43m
- \e[44m
- \e[45m
- \e[46m
- \e[47m
6. Afficher plusieurs couleurs dans l'invite
Vous pouvez également afficher plusieurs couleurs dans la même invite. Ajoutez la fonction suivante à .bash_profile
function prompt { local BLUE="\[\033[0;34m\]" local DARK_BLUE="\[\033[1;34m\]" local RED="\[\033[0;31m\]" local DARK_RED="\[\033[1;31m\]" local NO_COLOR="\[\033[0m\]" case $TERM in xterm*|rxvt*) TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) TITLEBAR="" ;; esac PS1="\u@\h [\t]> " PS1="${TITLEBAR}\ $BLUE\u@\h $RED[\t]>$NO_COLOR " PS2='continue-> ' PS4='$0.$LINENO+ ' }
Vous pouvez vous reconnecter pour que les modifications prennent effet ou vous procurer le .bash_profile comme indiqué ci-dessous.
$. ./.bash_profile $ prompt ramesh@dev-db [13:02:13]>
7. Modifiez la couleur de l'invite à l'aide de tput
Vous pouvez également changer la couleur de l'invite PS1 en utilisant tput comme indiqué ci-dessous :
$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"
capacités de couleur tput :
- tput setab [1-7] – Définissez une couleur d'arrière-plan à l'aide de l'échappement ANSI
- tput setb [1-7] – Définissez une couleur d'arrière-plan
- tput setaf [1-7] – Définissez une couleur de premier plan à l'aide de l'échappement ANSI
- tput setf [1-7] – Définir une couleur de premier plan
Capacités du mode texte tput :
- mettre en gras – Définir le mode gras
- mettre faible – activer le mode demi-luminosité
- tput smul – commencer le mode souligné
- tput rmul – quitter le mode souligné
- tput rev – Activer le mode inversé
- mettre smso - Entrez en mode hors concours (gras sur rxvt)
- tput rmso – Quitter le mode hors concours
- tput sgr0 – Désactivez tous les attributs
Code couleur pour tput :
- 0 - Noir
- 1 – Rouge
- 2 - Vert
- 3 – Jaune
- 4 – Bleu
- 5 – Magenta
- 6 – Cyan
- 7 – Blanc
8. Créez votre propre invite en utilisant les codes disponibles pour la variable PS1
Utilisez les codes suivants et créez votre propre invite PS1 Linux personnelle, fonctionnelle et adaptée à vos goûts. Quel code de cette liste sera très utile pour une utilisation quotidienne ? Laissez votre commentaire et faites-moi savoir quel code PS1 vous avez utilisé pour votre invite Linux.
- \a un caractère cloche ASCII (07)
- \d la date au format "jour de la semaine et mois" (par exemple, "mardi 26 mai")
- \D{format} – le format est passé à strftime(3) et le résultat est inséré dans la chaîne d'invite; un format vide donne une représentation temporelle spécifique aux paramètres régionaux. Les accolades sont obligatoires
- \e un caractère d'échappement ASCII (033)
- \h le nom d'hôte jusqu'à la première partie
- \H le nom d'hôte
- \j le nombre de jobs actuellement gérés par le shell
- \l le nom de base du nom du terminal du shell
- \n nouvelle ligne
- \r retour chariot
- \s le nom du shell, le nom de base de $0 (la partie suivant la barre oblique finale)
- \t l'heure actuelle au format 24 heures HH:MM:SS
- \T l'heure actuelle au format 12 heures HH:MM:SS
- \@ l'heure actuelle au format 12 heures am/pm
- \A l'heure actuelle au format 24 heures HH:MM
- \u le nom d'utilisateur de l'utilisateur actuel
- \v la version de bash (par exemple, 2.00)
- \V la version de bash, version + niveau de correctif (par exemple, 2.00.0)
- \w le répertoire de travail courant, avec $HOME abrégé avec un tilde
- \W le nom de base du répertoire de travail actuel, avec $HOME abrégé avec un tilde
- \ ! le numéro d'historique de cette commande
- \# le numéro de commande de cette commande
- \$ si l'UID effectif est 0, un #, sinon un $
- \nnn le caractère correspondant au nombre octal nnn
- \\ une barre oblique inverse
- \[ commencer une séquence de caractères non imprimables, qui pourraient être utilisés pour intégrer une séquence de contrôle de terminal dans l'invite
- \] terminer une séquence de caractères non imprimables
9. Utiliser la fonction shell bash dans la variable PS1
Vous pouvez également invoquer une fonction shell bash dans la PS1, comme indiqué ci-dessous.
ramesh@dev-db ~> function httpdcount { > ps aux | grep httpd | grep -v grep | wc -l > } ramesh@dev-db ~> export PS1="\u@\h [`httpdcount`]> " ramesh@dev-db [12]> [Note: This displays the total number of running httpd processes]
Vous pouvez ajouter la ligne suivante à .bash_profile ou .bashrc pour rendre ce changement permanent :
function httpdcount { ps aux | grep httpd | grep -v grep | wc -l } export PS1='\u@\h [`httpdcount`]> '
10. Utiliser le script shell dans la variable PS1
Vous pouvez également invoquer un script shell à l'intérieur de la variable PS1. Dans l'exemple ci-dessous, ~/bin/totalfilesize.sh, qui calcule la taille totale du fichier du répertoire courant, est appelé dans la variable PS1.
ramesh@dev-db ~> cat ~/bin/totalfilesize.sh for filesize in $(ls -l . | grep "^-" | awk '{print $5}') do let totalsize=$totalsize+$filesize done echo -n "$totalsize" ramesh@dev-db ~> export PATH=$PATH:~/bin ramesh@dev-db ~> export PS1="\u@\h [\$(totalfilesize.sh) bytes]> " ramesh@dev-db [534 bytes]> cd /etc/mail ramesh@dev-db [167997 bytes]>
[Note: This executes the totalfilesize.sh to display the total file size of the current directory in the PS1 prompt]
Combien de personnalisation avez-vous apporté à votre PS1 ? Votre PS1 peut-elle battre Angelina Jolie ? Laissez un commentaire et partagez votre PS1 valeur d'invite.
Lecture recommandée
Bash Cookbook, par Carl Albing, JP Vossen et Cameron Newham . Bash est un shell très puissant. Ce livre vous aidera à maîtriser le shell bash et à devenir très productif. Que vous soyez un administrateur système, un DBA ou un développeur, vous devez écrire un script shell à un moment donné. Un administrateur système avisé sait qu'une fois que vous avez maîtrisé les techniques de script shell, vous pouvez mettre vos serveurs en mode pilote automatique en laissant les scripts shell faire le gros du travail. Pour accéder au mode pilote automatique de sysadmin, vous devez absolument maîtriser les exemples fournis dans ce livre de recettes. Il existe peu de livres de shell Bash. Mais, ce livre les dépasse tous en donnant beaucoup d'exemples détaillés.
Recommandation de livre Linux supplémentaire :12 livres Linux étonnants et essentiels pour enrichir votre cerveau et votre bibliothèque
Si vous avez aimé cet article, veuillez le mettre en signet sur del.icio.us et Stumble it.