Niveau :
Résumé : vi ~/.bashrc
Innovation : aujourd'hui c'est vous qui écrivez l'article.
Flash info : retrouvez le vimrc collaboratif
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
################################################################### # 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' # Interdire l'écrasement de fichier avec > set -C # affichage sympathique de la ligne de commande PS1="[\t] \[\e[01;32m\]\u@\h\[\e[00m\]:\[\e[01;34m\]\w\[\e[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 -AhF' # -A : affiche aussi les fichiers commençant par un point # -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 "\033[1;31m$(date +%-d)\033[0m")}"' # Pour les gros doigts alias cd..='cd ..' alias grpe='grep' alias mroe='more' # d'autres par samybz alias iv='vi' alias tial='tail' # d'autres par h0m3r alias xs='cd' alias vf='cd' alias ..=' cd ..' # 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 petites typos shopt -s cdspell ################################################################### # by Chapi ########## # Eviter d'eteindre un serveur par mégarde quand on part du boulot alias halt="echo -e '\\n\\n\\nCa va pas non ? \\n\\n T es sur une becanne de prod mec !\\n\\n'" # 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 } ################################################################### # by Data ######### alias du='du -h --max-depth=1' alias dusort='du -x --block-size=1048576 | sort -nr' alias df='df -h' ################################################################### # by Julia ######### ## Mettre à jour sa distrib en quelques secondes (pour une SID assez marrant) alias ap="apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get autoclean && apt-get clean && apt-get autoremove && debclean" ################################################################### # by eric ####### # ajouter ~/bin dans le PATH si celui-ci existe (indispensable) if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" fi ################################################################### # by h0m3r ######### alias most='most -ct3 -s' alias grep=’egrep’ # Pour les regexp étendues alias mm=’ll’ alias a=’alsamixer’ alias j=’jobs’ alias c=’clear’ # Parfois plus facile à atteindre que le ^L alias vom=’vim’ alias cim=’vim’ alias p=’pwd’ # Pas de répértoire courant dans mon prompt (question de goûts) oblige. ################################################################### # by eric (http://blog.sietch-tabr.com/) ############################ # a utiliser avec des echo $_bold et echo $_normal _bold=$(tput bold) _normal=$(tput sgr0) # imprime les infos du gestionnaire de version en cours # si on en trouve un dans le pwd __vcs_dir() { local vcs base_dir sub_dir ref sub_dir() { local sub_dir sub_dir=$(readlink -f "${PWD}") sub_dir=${sub_dir#$1} echo ${sub_dir#/} } # git git_dir() { base_dir=$(git rev-parse --show-cdup 2>/dev/null) || return 1 if [ -n "$base_dir" ]; then base_dir=`cd $base_dir; pwd` else base_dir=$PWD fi sub_dir=$(git rev-parse --show-prefix) sub_dir="/${sub_dir%/}" ref=$(git symbolic-ref -q HEAD || git name-rev --name-only HEAD 2>/dev/null) ref=${ref#refs/heads/} vcs="git" } # subversion svn_dir() { [ -d ".svn" ] || return 1 base_dir="." while [ -d "$base_dir/../.svn" ]; do base_dir="$base_dir/.." done base_dir=`cd $base_dir; pwd` sub_dir="/$(sub_dir "${base_dir}")" ref=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }') vcs="svn" alias pull="svn up" alias commit="svn commit" alias push="svn ci" alias revert="svn revert" } # mercurial hg_dir() { base_dir="." while [ ! -d "$base_dir/.hg" ]; do base_dir="$base_dir/.." [ $(readlink -f "${base_dir}") = "/" ] && return 1 done base_dir=$(readlink -f "$base_dir") sub_dir="/$(sub_dir "${base_dir}")" ref=$(< "${base_dir}/.hg/branch") hgqtop=$(hg qtop) if [[ $hgqtop == 'No patches applied' ]]; then extra="" else extra=" >> $hgqtop" fi vcs="hg" } hg_dir || git_dir || svn_dir || base_dir="$PWD" echo "${vcs:+($vcs)}${_bold}${base_dir/$HOME/~}${_normal}${vcs:+[$ref]${_bold}${sub_dir}${_normal}$extra}" } # usage dans le prompt PS1='${debian_chroot:+($debian_chroot)}\u@\h:$(__vcs_dir)\$ ' ###################################################################
Comments