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()'" |
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 ;)
extract() -> unp (https://launchpad.net/ubuntu/+source/unp)
# 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”;
}
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).Tout ce que j’ai compris c’est que tu t’appelles Kevin.
test
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.
ha bon, je teste !
5410 voilà un chiffre rond c’est mieux ^^
5300 commentaires dont une bonne partie de spam effacée ou dans les méandre d’aksimet ;)
Ah oui, le spam
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
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 ;)
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 ! :-)
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 : http://spf13.com/post/mastering-the-command-line/ :-)
@baronsed : merci ca pourra tjs servir ;) mais je ne suis pas fan des raccourcis avec plus de 2 touches
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
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 :)
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 ;)
Enfin, pour savoir quand j’ai lancé les commandes dans mon historique:
HISTTIMEFORMAT, sympa.
404 sur le fichier de prompt.
Et il va le rester car ma config a tellement changé depuis que je peux pas remettre la main dessus.
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”
Je vais virer le lien :)