8 votes

Quels sont quelques invites de shell informatives et utiles? (Bash, csh, ksh, etc.)

Un de mes astuces préférées sur Mac OS X Terminal consiste à ajouter le dernier processus en cours d'exécution dans le titre du terminal en utilisant le code suivant dans votre .bashrc.

trap 'printf "\033]0;  `history 1 | cut -b8-`  \007"' DEBUG

Maintenant, je cherche à personnaliser mon invite de commandes Bash par défaut en quelque chose de plus fonctionnel. Quels sont quelques exemples utiles d'invite de commandes shell?

2voto

Glen Solsberry Points 1476

J'aime inclure l'heure dans la mienne. Cela me donne une sorte de time intégré autour de mes commandes :

PS1="[\t \u@\h:\w]$ "

Cependant, après avoir vu quelques-uns de ceux-ci, cela me donne envie de rendre la mienne un peu plus intelligente !

1voto

jammus Points 1796

Tout comme la réponse de chaos, j'aime bien

\u@\h:\w\n\u@\h:\$

ce qui me donne

root@host-10548:/var/www/site.org
root@host-10548:$

En incluant l'utilisateur/hôte sur la première ligne, je peux facilement copier cette ligne de chemin entière lorsque j'utilise SCP, ou rsync pour envoyer des fichiers vers ce répertoire.

0 votes

Excellente idée. Je peux voir que le chemin complet de l'encp serait très utile. La deuxième ligne pourrait être améliorée en ajoutant l'heure, comme l'a suggéré gms8994.

1voto

Curt Hagenlocher Points 12432

En ksh :

Dans mon .profile, j'ai défini la variable suivante (cette variable n'est définie qu'une fois par session, peu importe le nombre de 'su' que je fais :

PCH=\>

Dans mon .kshrc, j'ai :

if let "${SPID:-0} != $$"; then
    PCHS="$PCHS$PCH"

Je deviens root avec l'alias suivant, plutôt que "su" (kroot est un utilisateur root avec un shell ksh au lieu de sh (solaris) ou bash (linux) :

alias root='PCH=\# su -m kroot'
alias me="PCH=\> su -m $USER"

J'ai également défini ces deux fonctions :

function lprompt {
  PS1=$HOST' $? $PWD '"$PCHS "
}
function sprompt {
  PS1='$?":"${PWD##*/}'"$PCHS "

et enfin à la fin de .kshrc j'ai :

lprompt

Tout cela me donne automatiquement la configuration par défaut de la fin de mon invite pour indiquer si je suis root (et par conséquent si j'ai un parent qui était root), le répertoire de travail actuel, le nom d'hôte et le statut de sortie du dernier processus. sprompt supprime le nom d'hôte, réduit le chemin uniquement au nom de base, et supprime les espaces :

g3 0 /home/jj33 > expr 1 / 0
expr: division par zéro
g3 2 /home/jj33 > expr 1 / 1
1
g3 0 /home/jj33 > root
Mot de passe : 
g3 0 /home/jj33 ># me
g3 0 /home/jj33 >#> ^D
g3 0 /home/jj33 ># sprompt
0:jj33># me
g3 0 /home/jj33 >#> sprompt
0:jj33>#>expr 1 / 0
expr: division par zéro
2:jj33>#>

Les alias root/me sont issus de l'administration pré-sudo sur Solaris et les vieilles habitudes ont la vie dure. Je doute que quelqu'un mettrait en œuvre exactement la même chose de nos jours. Les fonctions de changement de l'invite et le statut de sortie continuent à être très précieux pour moi.

1voto

81bronco Points 7071

J'ai une invite de commande qui est simple, mais utilise des couleurs pour donner des informations supplémentaires :

drewble:~$ 

La couleur du nom d'hôte (drewble, dans ce cas) est différente sur chaque machine - quand j'obtiens une nouvelle machine sur laquelle je travaille, je choisis une couleur arbitraire pour cette machine. De cette façon, lorsque j'ai beaucoup de terminaux ouverts, il est facile de savoir sur quelle machine ils sont en SSH et réduit les erreurs que je peux commettre en étant sur la mauvaise machine. De plus, lorsque je fais sudo -s, je mets le nom d'hôte en majuscules et colorie les deux-points en rouge, ce qui réduit également les erreurs en indiquant clairement que vous agissez en tant que root. Le chemin (mon répertoire personnel, ~ dans ce cas) est en vert vif, ce qui aide à séparer les lignes de sortie ; si quelque chose crée beaucoup de sortie, il est facile de remonter et voir où la sortie a commencé.

# Colorier le nom d'hôte
HOSTNAME=`hostname|sed -e 's/\..*$//'`
if [ $HOSTNAME = 'Caligula' ] || [ $HOSTNAME = 'Caligula.local' ]; then
    export HOST_COLOR="\[\033[1;35m\]"
fi
if [ $HOSTNAME = 'drewble' ]; then
    export HOST_COLOR="\[\033[1;34m\]"
fi
if [ $HOSTNAME = 'davinci' ]; then
    export HOST_COLOR="\[\033[1;31m\]"
fi

# Colorier les deux-points en rouge & mettre le nom d'hôte en majuscules si c'est root
COLON_COLOR='0m'
if [ ${UID} -eq 0 ]; then
    COLON_COLOR='1;31m'
fi
if [ ${UID} -eq 0 ]; then
    HOSTNAME="`echo $HOSTNAME|tr '[a-z]' '[A-Z]'`"
fi

# Définir l'invite de commande réelle
PS1=`echo -ne "$HOST_COLOR$HOSTNAME\[\033[0

1voto

deinspanjer Points 340

Il ne s'agit pas d'un shell prompt, mais d'une personnalisation qui pourrait correspondre à ce que vous demandez.

J'ai défini la variable d'environnement suivante :

if [ -z "$PROMPT_COMMAND" ]; then
    export PROMPT_COMMAND='history -a'
else
    export PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
fi

De cette manière, si j'ai plusieurs terminaux ouverts via screen ou autre, je ne perdrai pas l'historique quand ils écrasent les modifications des autres.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X