A l’intérieur de mon .bashrc


Généralement montrer son .bashrc donne rapidement lieu dans les comments à un concours de celui qui a la plus longue (jusqu’à ce qu’arrive un utilisateur de zsh, et alors commence le concours de celui qui pisse le plus loin). Mais bon, aujourd’hui j’ai la flemme d’écrire un article complet.

Rappel : le .bashrc c’est le fichier qui est automatiquement chargé au démarrage du shell bash, le shell par défaut sur la plupart des Unix incluant Mac et Ubuntu.

Donc si vous voulez avoir une expérience de travail personnalisée dans votre terminal, c’est dans ce fichier que ça se passe.

Personnellement, j’ai tout le bordel que met Ubuntu par défaut (notamment les trucs avec les autocomplétions de partout). En en prime je rajoute :

# un raccourcis pour lancer Redis car je le met sur off par défaut mais je le 
# lance souvent
 
function redis {
    if [ ! -e "/var/run/redis/redis-server.pid" ] ; then
        sudo service redis-server start
    fi
}
 
# un tas de raccourcis type
 
function projet_django {
    workon projet_django;
    cd /home/sam/Work/projet_django/repo/projet_django;
 
    if [[ $# -ne 0 ]]; then
        ./manage.py $@
    fi
}
alias sb='projet_django'
 
# CF: http://sametmax.com/un-alias-bash-pour-django-virtualenv-dont-je-ne-peux-plus-me-passer/
 
 
# fonction fétiche de bourrin
 
function killbill {
    BAK=$IFS
    IFS=$'\n'
    for id in $(ps aux | grep -P -i $1 | grep -v "grep" | awk '{printf $2" "; for (i=11; i<NF; i++) printf $i" "; print $NF}'); do 
        service=$(echo $id | cut -d " " -f 1)
        if [[ $2 == "-t" ]]; then
            echo $service \"$(echo $id | cut -d " " -f 2-)\" "would be killed"
        else
 
            echo $service \"$(echo $id | cut -d " " -f 2-)\" "killed"
            kill -9 $service
        fi
    done
    IFS=$BAK
}
 
# que j'ai un peu amélioré depuis http://sametmax.com/tu-vas-crever-oui/
 
 
# une fonction pour commiter rapidement 
function commit {
    git commit -m "`echo "$*" | sed -e 's/^./\U&\E/g'`"
}
alias co=commit;
 
# en gros on tappe "co message de commit". Sans guillement, sans rien.
 
# des completions pour manage.py et git
 
source /home/sam/.django_bash_completion
source /home/sam/.git-completion.bash
 
# activation du cache de pip pour éviter de télécharger 20 fois la même lib
 
PIP_DOWNLOAD_CACHE='/opt/pip-cache';
export PIP_DOWNLOAD_CACHE;
 
# un super outil pour un git plus user friendly
 
[ -s "/home/sam/.scm_breeze/scm_breeze.sh" ] && source "/home/sam/.scm_breeze/scm_breeze.sh"
alias c="git_index"
 
# j'en avais parlé ici : http://sametmax.com/scm-breeze-facilite-la-selection-de-vos-fichiers-a-commiter-sous-git-avec/
 
 
# un prompt personalisé tout en couleur
# formaté comme ça: [nom du virtualenv] sam ~/path (branche git) $
 
source ~/.prompt.bash
 
 
# la configuration de virtualenv wrapper 
export WORKON_HOME=/home/sam/.virtualenvs
mkdir -p $WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh
 
# plus de détails ici : http://sametmax.com/les-environnement-virtuels-python-virtualenv-et-virtualenvwrapper/
 
 
# j'ai récément succombé aux sirène du virtualenv automatique
# j'avais beaucoup d'a priori (particulirement écraser la commande CD)
# mais à l'usage, c'est pratique
has_virtualenv() {
    if [ -e .venv ]; then
        workon `cat .venv`
    fi
}
venv_cd () {
    builtin cd "$@" && has_virtualenv
}
alias cd="venv_cd"
has_virtualenv
 
# en gros ça m'active un virtualenv si il y a un fichier .venv avec un nom
# de virtualenv dedans dans le dossier courrant
 
 
# je vous en parlais récement (http://sametmax.com/configurer-votre-terminal-pour-quil-vous-notifie-de-la-fin-dune-commande-longue/)
# c'est pour avoir une notifi à la fin des commandes longues 
notify_when_long_running_commands_finish_install
 
 
# ca c'est un truc de feignasse car je me souviens jamais comment extraire 
# en ligne de commande tel ou tel format
 
extract () {
    if [ -f $1 ]
    then
        case $1 in
            (*.7z) 7z x $1 ;;
            (*.lzma) unlzma $1 ;;
            (*.rar) unrar x $1 ;;
            (*.tar) tar xvf $1 ;;
            (*.tar.bz2) tar xvjf $1 ;;
            (*.bz2) bunzip2 $1 ;;
            (*.tar.gz) tar xvzf $1 ;;
            (*.gz) gunzip $1 ;;
            (*.tar.xz) tar Jxvf $1 ;;
            (*.xz) xz -d $1 ;;
            (*.tbz2) tar xvjf $1 ;;
            (*.tgz) tar xvzf $1 ;;
            (*.zip) unzip $1 ;;
            (*.Z) uncompress ;;
            (*) echo "don't know how to extract '$1'..." ;;
        esac
    else
        echo "Error: '$1' is not a valid file!"
        exit 0
    fi
}
 
# ça date de http://sametmax.com/decompresser-sous-linux-en-ligne-de-commande/
 
# et quelques alias pour des tâches de tous les jours
 
alias ..='cd ..'
alias ...='cd ../../'
alias ....='cd ../../../'
alias .....='cd ../../../../'
alias ......='cd ../../../../../'
 
alias process='ps aux | grep'
alias serve="python -c 'import SimpleHTTPServer; SimpleHTTPServer.test()'"

24 thoughts on “A l’intérieur de mon .bashrc

  • r4is3

    Pas besoin de faire un concours de celui qui a la plus grosse ou qui pisse le plus loin, le bashrc correspond à l’usage de son propriétaire, donc c’est pas un sujet de discussion.
    Par contre on peut toujours y relever des trucs interessants.
    j’y exporte quelques fonctions (faire du md5 facile, generer des passwords, parser des logs…) plus quelques options pour de la coloration par defaut (du grep, du ls, prompt/user, et du man).
    THX pour l’article.

    PS: De toutes façons la plus grosse on sait tous qui est-ce qui l’a ;)

  • Baronsed

    # sécurités
    alias mv=’mv -i’
    alias rm=’rm -I’
    alias shred=’shred -uz’

    # pratiques
    alias rsync=’rsync -hP’
    alias bc=’bc -q’
    alias gdb=’gdb -q’

    alias vmi=’vim’
    alias ivm=’vim’
    alias cim=’vim’
    alias bim=’vim’

    # cd
    alias xs=’cd’
    alias ..=”cd ..”
    b() {
    count=0
    while [ “$count” -lt “$1″ ]
    # pourquoi ça ne marche pas avec une boucle for ?
    do
    str=$str”../”
    count=$[ $count+1 ]
    done
    cd $str
    }

    function mkcd() {
    mkdir -p “$1” && cd “$1”;
    }

  • Guillaume

    J’ai eu un peu la flemme de comprendre la totalité de
    $(ps aux | grep -P -i $1 | grep -v "grep" | awk '{printf $2" "; for (i=11; i<NF; i++) printf $i" "; print $NF}');

    mais si j’ai bien compris tu recupere le PID d’un process, et pour ça y’a pgrep qui change la vie. Je sais pas si c’est de base sur toutes les flavors d’UNIX, mais sur OS X il me semble que oui (ou alors je l’ai installé sans m’en souvenir).

  • Etienne

    Quand on poste un comment, on est redirigé vers:
    sametmax//#comment-. Je viens de poster le 5408ème commentaire de ce blog, semble-t-il…

    Pas mal les gars.

  • Max

    5300 commentaires dont une bonne partie de spam effacée ou dans les méandre d’aksimet ;)

  • rennes

    Je rajoutes pour la route le serveur SMTP de debug.
    On l’utilise jamais, mais impossible a mémoriser, donc pratique dans le .bashrc

    python -m smtpd -n -c DebuggingServer localhost:1025

  • foxmask

    avec le ps aux j’ajoute l’option forrest (f) et quelques w pour avoir la ligne complète des process, affichée sur plusieurs lignes genre quand j’ai 10 lignes de java demarrées toute de la même façon.
    sinon dans le kiff du shell bash j’aime :

    ctrl-k au milieu d’une ligne
    ctrl-r pour les recherches incrémentales dans l’historique
    ctrl-a pour aller au debut de la ligne
    ctrl-e pour aller à la fin de la ligne

    c’est peu mais efficace dans 99% de mon quotidien ;)

  • JEEK

    Mmmmh, killbill…yabon !
    kill -9 is great…

    J’avoue que je ne m’en lasse pas, même si les puristes imitent le tableau du cri quand on leur dit qu’on bourrine à donf en -9 (cf. why not kill -9 a process? ; préférant le kill -15 pour que le process ait le temps de faire son testament, dire au revoir à son papa en copiant le petit Guy Môquet…bref, lui laisser le temps de lâcher une larme avant de se faire défoncer…proprement) !

    Mais parfois, l’admin…c’est comme la guerre : c’est pas propre ! :-)

  • r4is3

    Allez, un ptit cadeau synchro avec la meteo :

    letitsnow() { clear;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS));sleep 0.1;done|awk ‘{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf “33[%s;%sH “,o,x;printf “33[%s;%sH*33[0;0H”,a[x],x;}}’; }

    Enjoy les poulettes xD

  • foxmask

    @baronsed : merci ca pourra tjs servir ;) mais je ne suis pas fan des raccourcis avec plus de 2 touches

  • utopman

    Salut Max,

    plusieurs choses dans cet article:
    j’aime
    j’ai presque tout lu
    j’ai presque compris tout ce que j’ai lu

    aussi:
    je ne laisse jamais de commentaires sur un site, mais je vous suis depuis quelques temps et j’adore un peu tout ce que vous faite (surtout python et django) mais j’ai bien aimé lire l’article sur le KFF en montrant encore une fois à ma copine que je suis sur un blog techno…

    sinon:
    je pense piocher quelques trucs étant donné que je change de job, je vais bosser sous linux et ca va me faire respirer mieux(je pensais au extract()).

    et encore:
    j’ai aimé la fonction .. et je vous propose la mienne:

    function poinpoin {
    for point in {0 .. $1};do cd ..;done;
    }
    alias ..=poinpoin
    #on fait .. x et on remonte d'autant qu'on a envie :)

    Encore un super article lisible par 0.0002% de la population. Merci

  • Philippe

    J’ai beaucoup aimé la fonction killbill, alors comme moi aussi j’ai quelques fonctions dans mon ~/.bashrc, et malgrè que le post date un peu, je partage :)

    #Toujours utile pour voir les options qui ne sont pas commentées dans les fichiers de conf trop longs genre squid.conf
    Egrep () {
      if [ $# -eq 1 ]; then
        grep -Ev "#|^$"
      elif [ $# -eq 2 ]; then
        grep -Ev "${2}|^$" ${1}
      fi

    Dans le même ordre d’idée, voir où ces $#*%? de dev ont laissé des IPs en dur partout: (bon, ça aide aussi pour d’autres choses ;)

    IPgrep(){
      grep -nrE "([0-9]{1,3}.){3}[0-9]{1,3}" ${1}
    }

    Enfin, pour savoir quand j’ai lancé les commandes dans mon historique:

    export HISTTIMEFORMAT="%d/%m %H:%M:%S "
  • Sam Post author

    Et il va le rester car ma config a tellement changé depuis que je peux pas remettre la main dessus.

  • poulpe

    Préciser dans l’article pour le 404 du prompt, ca evitera qu’on soit 404 à te le remonter ;)

    +1 pour le HISTTIMEFORMAT, et j’ajoutes obligatoirement la protection de perte d’histo quand on a plus d’une console ouverte:

    PROMPT_COMMAND=”history -a; history -n”

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.