bashrc collaboratif

Publié le 03 septembre 2007 par Peck
Cet article est maintenant sur http://linux-attitude.fr/post/Bashrc-collaboratif

Niveau :
Résumé : vi ~/.bashrc

Innovation : aujourd'hui c'est vous qui écrivez l'article.

Il s'agit d'écrire un fichier .basrhc idéal avec toutes les fonctions et tous les alias qui vous semblent indispensables.  Je commence par un minimum et par quelques choses que j'ai déjà écrites puis je rajouterai vos parties avec votre nom au fur et à mesure des commentaires.

Petite note sur le .bashrc : le fichier ~/.bashrc est lu par bash lorsqu'il est lancé en mode interactif (en gros à chaque nouveau terminal graphique et à chaque fois que vous tapez la commande bash sans paramètre). Lorsqu'on se connecte à une machine (en console ou pas ssh), le shell est lancé en mode login et il lit le .bash_profile à la place. Pour avoir un environnement commun dans tous les cas, je vous conseille d'ajouter les lignes suivantes dans votre .bash_profile
if [ -f ~/.bashrc ]; then
   . ~/.bashrc
fi

Et si vous êtes dans un script ou un bash -c et que vous voudriez que le .bashrc soit pris en compte utilisez l'option -i
$ bash -i -c "ll"

Notez que si vous voulez avoir ces lignes disponibles pour l'ensemble des utilisateurs du système, écrivez les dans /etc/bash.bashrc

Notez aussi que debian par exemple propose de mettre tous les alias dans un fichier séparé : .bash_aliases


.bashrc
# Attention ne faites pas confiances aux de cet article ils se font bouffer par over-blog !
###################################################################
# ne rien faire en mode non interactif
[ -z "$PS1" ] & return
# ne pas mettre en double dans l'historique les commandes tapées 2x
export HISTCONTROL=ignoredups
# lignes de l'historique par session bash
export HISTSIZE=5000
# lignes de l'historique conservées
export HISTFILESIZE=20000
# supporte des terminaux redimensionnables (xterm et screen -r)
shopt -s checkwinsize
# une commande fréquemment utilisée
alias ll='ls -l'
# utilisation des couleurs pour certaines commandes
eval "`dircolors -b`"
alias ls='ls --color=auto'
alias grep ='grep --color=auto'
# affichage sympathique de la ligne de commande
PS1='t [33[01;32m]u@h[33[00m]:[33[01;34m]w[33[00m]$ '
# permettre une complétion plus "intelligente" des commandes (question de goût)
if [ -f /etc/bash_completion ]; then
   . /etc/bash_completion
fi
# lecture colorée de logs
logview()
{
   ccze -A < $1 | less -R
}
# lecture colorée de logs en directfunction logview()
logtail()
{
   tail -f $1 | ccze
}
###################################################################
# by Simon
#########
# Pour compter les mails non lus dans un maildir :
function cm {
   echo "Inbox: $(find -L ~/Maildir/  -type f -regex '.*/new/.*'| wc -l)" ;
}
# Utiliser vimdiff pour differ niveau mot des fichiers CVS :
# Usage : cvswdiff lefichier [-rVersion]
function cvswdiff {
   vimdiff $1 <(cvs co -p $2 $(cat $(dirname $1)/CVS/Repository)/$(basename $1)) ;
}
###################################################################
# by Schmurtz
############
#Bien pratique pour ceux qui utilisent encore CVS, mais qui, heureusement, ont quand même quitté l'antique rsh :
export CVS_RSH=ssh
# Pour afficher user@host dans le titre de la fenêtre de terminal :
PROMPT_COMMAND='echo -ne "33]0;$(id -un)@$(hostname -s)07"'
# Pour définir l'éditeur par défaut utilisé par de nombreuses commandes (vipw, visudo, less, cvs, svn...) :
export EDITOR=nano # ou vim / emacs
# Pour ceux qui sont frileux (demande confirmation de chaque suppression ou écrasement) :
alias cp='cp -ip' # -p : conserve les dates, droits lors de la copie
alias mv='mv -i'
alias rm='rm -i'
# Pour utiliser des clefs ssh protégées par mot de passe, sans les retaper à chaque connexion (il faut alors utiliser sshk et scpk à la place de ssh et scp) :
if [[ -z "$SUDO_UID" & $UID -ne 0 ]]; then
   export SSH_AUTH_SOCK="/tmp/ssh-agent-$UID.socket"
   [[ -e "$SSH_AUTH_SOCK" ]] || ssh-agent -a $SSH_AUTH_SOCK -t 3000 > /dev/null
fi
alias ssh-add='ssh-add -t 3000' # une clé a une durée de vie de 50mn
sshk() { [[ "$(ssh-add -l)" == "The agent has no identities." ]] & ssh-add; ssh "$@"; }
scpk() { [[ "$(ssh-add -l)" == "The agent has no identities." ]] & ssh-add; scp "$@"; }
# Quelques paramètres pratiques :
alias ls='ls -AwhF'
# -A : affiche aussi les fichiers commençant par un point
# -w : affiche bien les caractères non ASCII
# -h : affiche la taille avec B/K/M/G;
# -F : affiche un caractère à la fin du nom indiquant le type de fichier
alias ll='ls -lo'
# -o : affiche les flags, pratique pour détecter les uchg (cf chflags(1))
alias chown='chown -h'
# -h : pour un lien, change le propriétaire/groupe du lien lui même
# Pour permettre de taper des caractères accentués dans le shell :
bind 'set convert-meta off'
###################################################################
# by Ebzao
#########
# utilisation de most (avec les couleurs) si disponible
export PAGER=`which most`
export PAGER=${PAGER:-less}
# Calendrier du mois en cours, en rouge le jour actuel
alias c='var=$(cal -m); echo "${var/$(date +%-d)/$(echo -e "33[1;31m$(date +%-d)33[0m")}"'
# Pour les gros doigts
alias cd..='cd ..'
alias grpe='grep'
alias mroe='more'
# Remonter d'un dossier et ls
alias u="cd .. & ls --color"
# Ne pas garder les trucs inutiles dans les logs (attention peut casser certaines habitudes)
export HISTIGNORE="cd:ls:[bf]g:clear"
# Correction automatique des petits typos
shopt -s cdspell
###################################################################
# by Chapi
#########
# Eviter d'eteindre un serveur par mégarde quand on part du boulot
alias halt="echo -e 'nnnCa va pas non ? nn T es sur une becanne de prod mec !nn'"
# faire un diff rcs entre la version actuelle et la dernière automatiquement
function myrcsdiff {
  V=`rcsdiff $1 2>&1 | grep "^diff" | perl -pe 's/diff -r([d.]+) .*/$1/'`
  NB=`echo $V | cut -f2 -d"." | wc -c`
  NN=`expr $NB - 1`
  N1=`echo -e "scale=$NNn1/10^$NN"|bc -l`
  N2=`echo $V - $N1 | bc -l`
  echo $N2
  rcsdiff -r$N2 $1
}
###################################################################

À vous ...