Customisation de mon .bashrc
Petit article pour me souvenir d'un bout de script que j'ai placé à la fin de mon fichier .bashrc, qui me permet d'obtenir 2-3 infos sur mon système au lancement d'un terminal. Au menu, la date, l'heure, la version de l'OS, du noyau, l'uptime et les adresses IP de mes interfaces réseaux. Au final, j'obtiens ce rendu :
Première chose que j'ajoute au fichier de configuration de Bash : la définition de quelques couleurs. En effet, ça ne se voit pas beaucoup ici, mais les infos affichées en haut du terminal sont en gris clair. Je peux donc choisir des couleurs différentes pour chaque machine, et pouvoir différencier mes terminaux rapidement.
black='e[0;30m' blue='e[0;34m' green='e[0;32m' cyan='e[0;36m' red='e[0;31m' purple='e[0;35m' brown='e[0;33m' lightgray='e[0;37m' darkgray='e[1;30m' lightblue='e[1;34m' lightgreen='e[1;32m' lightcyan='e[1;36m' lightred='e[1;31m' lightpurple='e[1;35m' yellow='e[1;33m' white='e[1;37m' nc='e[0m'
Ensuite, j'ai les deux parties les plus longues du script (au passage, si quelqu'un voit comment faire mieux, je suis preneur :-) ). J'affiche sous les infos mon login et le nom de ma machine, le tout entouré d'une ligne. Le problème, c'est que je peux avoir plusieurs tailles de fenêtres, et les traits seraient trop petits ou trop grands. J'ai donc une boucle pour n'afficher que le bon nombre de tirets :
theUser="───────[$USER@$HOSTNAME]" lgth=$(($COLUMNS-$)) i=0 while [[ $i -lt $lgth ]]; do theUser="$theUser─" (( i += 1 )) done
Ensuite, je cherche à récupérer les adresses IP de mes interfaces réseaux. Problème : certaines interfaces n'ont pas d'adresses IP définies, et d'autres sont inutilisées (adresses virtuelles de communication avec mes VM). J'ai donc un bout de script un peu moche avec une boucle et des conditions...
ip_adress="" for if in eth0 wlan0 do ip=$(ip addr show dev $if | grep "inet "| awk '{print $2}') if [[ "$ip" ]] then if [[ -z "$ip_adress" ]] then ip_adress=" ${lightgray}$if : $ip" else ip_adress="$ip_adressn ${lightgray}$if : $ip" fi fi done ip=$(curl -s 'http://canihazip.com/s/') if="IP Publique" if [[ "$ip" ]] then if [[ -z "$ip_adress" ]] then ip_adress=" ${lightgray}$if : $ip" else ip_adress="$ip_adressn ${lightgray}$if : $ip" fi fi if [[ -n ip_adress ]] then ip_adress=" Network : $ip_adress" fi
Notez que les espaces permettent juste d'avoir un affichage "propre" des valeurs.
Enfin, je ne fais qu'afficher les données dans mon terminal avec de la substitution de commandes pour afficher les infos utiles :
clear echo -e "" echo -e " ${lightgray}Today : `date`" echo -e " ${lightgray}System : `lsb_release -i | cut -f 2` - `lsb_release -c | cut -f 2` - `lsb_release -r | cut -f 2`" echo -e " ${lightgray}Kernel : `uname -o` `uname -r` - `uname -m`" echo -e " ${lightgray}Uptime : `uptime`" echo -e "$ip_adress" echo -e "${lightgray}$theUser"
Tous ces petits bouts de codes ne ralentissent pas (pas trop) l'ouverture de mon terminal, seul le curl et les boucles sont un peu lents, mais ce n'est pas trop gênant!
Tout ceci est basé sur un script écrit par @VictorBersy.