Catégories
Open-source Planet-libre Systeme

Configurer votre prompt BASH

S’il y a bien une chose que nous, geeks du monde libre, regardons en longueur de journée, c’est bien notre cher prompt (vous savez: $, # …). C’est en lisant ce billet que je me suis dit que mon prompt actuel avait besoin d’un ravalement de façade:

Je souhaite mettre un peu de couleur dans mon nouveau prompt ainsi que des informations sur le dossier en cours. Quand ce dernier est un dossier de développement sous Git, je veux afficher la branche en cours d’utilisation et aussi savoir si mon répertoire est dans l’état « staging » (c’est à dire si je dois faire un commit).

Sans plus attendre, voici un aperçu de mon nouveau prompt (version 2 lignes):

Ce dernier se décompose en deux lignes:

  • user@host:folder (je garde cette structure pour simplifier les copier/coller en SSH, puis l’état Git (avec [le nom de la branche] en couleur rouge si staging, vert sinon)
  • le prompt proprement dit (là ou l’on va taper la commande :)) précédé de $ si on est un utilisateur standard et # si root

Pour la première ligne, j’utilise la variable BASH nommé PROMPT_COMMAND qui a le gros avantage d’être exécuté à chaque fois que le prompt est affiché (pas seulement à l’initialisation). La seconde ligne utilise la variable PS1.

Pour disposer de ce prompt, il est nécessaire d’insérer le code suivant à la fin de votre fichier .bashrc (il est aussi disponible sous GitHUB):

[cc lang= »bash »]

# Colors

NoColor= »\033[0m »

Cyan= »\033[0;36m »

Green= »\033[0;32m »

Red= »\033[0;31m »

Yellow= »\033[0;33m »

# Chars

RootPrompt= »# »

NonRootPrompt= »$ »

# Contextual prompt

prompt() {

USERNAME=`whoami`

HOSTNAME=`hostname`

CURRENTPATH=`pwd`

LEFTPROMPT=$Cyan$USERNAME@$HOSTNAME »: »$Yellow$CURRENTPATH

let LEFTSIZE=$(echo -n « $USERNAME@$HOSTNAME:$CURRENTPATH » | wc -c)

RIGHTPROMPT= » »

let RIGHTSIZE=0

GITSTATUS=$(git status 2> /dev/null)

#echo $GITSTATUS > /dev/null 2>&1

if [ $? -eq 0 ]; then

echo $GITSTATUS | grep « not staged » > /dev/null 2>&1

if [ $? -eq 0 ]; then

RIGHTPROMPT=$Red

else

RIGHTPROMPT=$Green

fi

BRANCH=`git describe –contains –all HEAD`

RIGHTPROMPT=$RIGHTPROMPT »[Git branch « $BRANCH »] »

let RIGHTSIZE=$(echo -n « [Git branch « $BRANCH »] » | wc -c)

fi

let BLANCKSIZE=${COLUMNS}-${LEFTSIZE}-${RIGHTSIZE}

RIGHTPROMPT=$RIGHTPROMPT$NoColor

echo -e -n $LEFTPROMPT

printf « %$(($BLANCKSIZE))s »

echo -e $RIGHTPROMPT

}

# Main prompt

PROMPT_COMMAND=prompt

if [ $EUID -ne 0 ]; then

PS1=$NonRootPrompt »  »

else

PS1=$RootPrompt »  »

fi

[/cc]

Update (20/02/2012): Je viens également d’ajouter une version allégée (en une seule ligne) de ce prompt. Le fichier de configuration BASH correspondant se trouve ici.

Update (21/02/2012): David Olivier vient de modifier  le script (version deux lignes) pour fonctionner avec SVN. A retrouver sur le GitHub.

Et vous, comment est votre prompt ?

 

Catégories
Open-source Systeme

Pense-bête: lignes de commandes

Voici un nouvel article que je vais faire évoluer dans le temps au fil de mes découvertes. Le but est d’y centraliser (avec un classement par thème) les lignes de commandes Unix utiles et que j’ai toujours beaucoup de mal à retenir (c’est l’âge mon bon monsieur).

Lecteurs, vous êtes libre d’enrichir cette base avec vos commentaires.

Fichiers & répertoires

Affiche la taille d’un répertoire en octets.

Syntaxe:

[shell]

du -sh /mon/path | awk ‘{print $1}’

[/shell]

Exemple:

[shell]

du -sh /usr/local/ |awk ‘{print $1}’

375M

[/shell]

Système

Ajoute un dépôt PPA sous Ubuntu (9.04 ou supérieur).

Syntaxe:

[shell]

sudo add-apt-repository ppa:nicolargo

[/shell]

Exemple:

[shell]
gpg: requête de la clé CEC06767 du serveur hkp keyserver.ubuntu.com
gpg: clé CEC06767: clé publique « Launchpad Nicolargo PPA » importée
gpg: Quantité totale traitée: 1
gpg:               importée: 1  (RSA: 1)
[/shell]

Réseau

Affiche les informations sur sa carte réseau.

Syntaxe:

[shell]

sudo mii-tool -v

[/shell]

Exemple:

[shell]

eth0: negotiated 100baseTx-FD flow-control, link ok
product info: vendor 00:50:43, model 11 rev 1
basic mode:   autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

[/shell]

Affiche son adresse IP publique.

Syntaxe:

[shell]

curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"

[/shell]

Exemple:

[shell]

89.122.166.229

[/shell]

Affiche les ports réseau en écoute sur sa machine.

Syntaxe:

[shell]

sudo lsof -Pni4 | grep LISTEN

[/shell]

Exemple:

[shell]

sshd        912  root    3u  IPv4    4255      0t0  TCP *:22 (LISTEN)
netserver  1355  root    4u  IPv4    5747      0t0  TCP *:12865 (LISTEN)
ntop       1456  ntop    1u  IPv4    6080      0t0  TCP *:3000 (LISTEN)
master     1549  root   12u  IPv4    6175      0t0  TCP *:25 (LISTEN)
cupsd      1644  root    6u  IPv4  649219      0t0  TCP 127.0.0.1:631 (LISTEN)
beam.smp   2256  labo   16u  IPv4   11238      0t0  TCP 127.0.0.1:44732 (LISTEN)
dropbox   15432  labo   19u  IPv4  227846      0t0  TCP *:17500 (LISTEN)

[/shell]

Tester sa connectivité réseau de bout en bout avec mtr (ping+traceroute).

Syntaxe:

[shell]

mtr www.google.fr

[/shell]

Exemple:

Audio/video

Encoder un VOB DVD vers un OGG Theora en qualité correcte.

Syntaxe:

[shell]
ffmpeg2theora -V 900 -x 540 –first-pass log input.vob -o output.ogv</code>  <code>; ffmpeg2theora -V 900 -x 540 –second-pass log input.vob -o output.ogv
[/shell]

Exemple:

A vous de sheller…