Alias et paramètres en ligne de commande

Written by Olivier Pons on août 6th, 2009

Voilà la solution pour faire un alias qui prenne en compte un paramètre : il faut savoir qu’un alias ne connait pas les paramètres qu’on lui passe. Un alias c’est vraiment, physiquement parlant, un « remplacer » de l’ordre que vous tapez.

Donc utiliser alias qui prendrait en compte un argument qu’on lui passe ?
C’est bien simple : c’est impossible. Mais on peut très facilement contourner cela.

Exemple : je développe en C, je veux tout le temps :

  1. reformatter le fichier C avant de l’éditer avec la ligne :
    indent -kr -nut {nom du fichier}
  2. afficher ce fichier avec vim :
    vim {nom du fichier}

La ligne de commande est donc toujours :
indent -kr -nut {nom du fichier} && vim {nom du fichier}

J’ai pensé faire un alias qui ressemblerait à cela :
alias vimi="indent -kr -nut $1 && vim $1"
Bien évidemment ça ne fonctionnera jamais.

Alors j’ai fait un tout petit script qui fonctionne très bien :
#!/bin/bash
case $# in
1) indent -kr -nut $1 && vim $1 ;;
*) echo "$0 {nom de fichier source .c / .h} ";;
esac

Et tout fonctionne !
Pour la note : indent -kr -nut {nom de fichier source .c / .h} signifie « indenter le fichier C selon les concepts de Kernighan & Ritchie, et ne pas mettre de tabulations, mais des espaces ». Pourquoi cela ? J’ai développé un module Apache, et pour le faire proprement, j’ai suivi leurs directives : Kernighan & Ritchie, et ne pas mettre de tabulations, mais des espaces, afin de me forcer à être habitué à lire du code d’une certaine façon. Ce type d’indentation n’est pas mon préféré, mais au moins, si je lis du code source C qui n’est pas fait par moi, je m’y retrouve plus facilement.

 

1 Comments so far ↓

  1. Ptigrouick dit :

    Il y a une autre solution que la création d’un script : au lieu de faire un alias, il suffisait de faire une fonction dans le fichier de configuration du shell (.bash_profile ou .bashrc). C’est la même chose qu’un alias, mais ça accepte des paramètres.
    Voici ce que ça donne :

    function vimi() { indent -kr -nut $1 && vim $1; }

    Et c’est réglé !

You must be logged in to post a comment.