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?

7voto

Eddie Points 11262

J'ai un script ~/bin/setprompt qui est exécuté par mon .bashrc, qui contient :

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

# Tout mettre ensemble
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "

Ce script définit l'invite à partir du nom d'hôte suivi de :) si la dernière commande a réussi et :( si la dernière commande a échoué.

6voto

Corin Blaikie Points 6223

J'utilise un simple prompt en deux lignes :

[\w]\n\u@\h>

ou

[\w]\n\u@\h#

si root. Les gens me regardent comme si j'étais fou d'utiliser un prompt en deux lignes, mais je déteste ne voir que la dernière partie du chemin actuel, et je travaille avec des chemins trop longs pour mettre le tout sur la même ligne que la zone de saisie.

0 votes

Alors je dois être foutrement insensé d'utiliser une invitation en 3 lignes, lol.

4voto

Glen Solsberry Points 1476

Cependant, c'est le plus incroyable que j'ai jamais vu :

PS1='\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[0;28m\]Gestion \033[1;31m\]\j\[\033[0m\]\[\033[1;30m\]/\[\033[0m\]\[\033[1;31m\]$(ps ax | wc -l | tr -d '\'' '\'')\[\033[0m\]\[\033[1;30m\] \[\033[0m\]\[\033[0;28m\]tâches.\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[0;28m\]Charge CPU: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/loadavg) && echo ${temp%% *}) \[\033[0m\]\[\033[0;28m\]Temps de fonctionnement: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/uptime) && upSec=${temp%%.*} ; let secs=$((${upSec}%60)) ; let mins=$((${upSec}/60%60)) ; let hours=$((${upSec}/3600%24)) ; let days=$((${upSec}/86400)) ; if [ ${days} -ne 0 ]; then echo -n ${days}j; fi ; echo -n ${hours}h${mins}m)\[\033...

1 votes

Hah, très impressionnant!

0 votes

Ça semble bien, mais ça ne fonctionne pas sur mon ordinateur FreeBSD :(

0 votes

@eugene y: Certains de ces chemins ne sont probablement pas présents sur des machines FreeBSD...

3voto

Dave Anderson Points 5159

Je suis fan de l'invite de commandes bash par défaut de Cygwin :

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

ou sans couleurs :

PS1='\n\u@\h \n\$ '

ressemble à :

username@hostname
$ ls -l

2voto

Campbell Points 2129

Voici le mien (faites défiler vers la droite pour voir une partie plus intéressante) :

'-------------------------------------------------------------------------------\n${debian_chroot:+($debian_chroot)}[\w]\n\u@\h\[\033[1;33m\]\[\033[0m\]($(__git_ps1 "%s")$(parse_git_dirty))$ 

Voici le résultat :

-------------------------------------------------------------------------------
[~]
user@host()$ 

Lorsque je suis à l'intérieur d'un référentiel Git :

-------------------------------------------------------------------------------
[~/chemin_vers_repo]
user@host(master)$ 

Je choisis d'utiliser plusieurs sauts de ligne et le "règle horizontale" pour rendre plus facile l'analyse des tampons, et les longs noms de chemin ne poussent pas le curseur trop loin vers la droite.

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