Comment passer des arguments de ligne de commande à un alias de shell?

Comment passer les arguments de la ligne de commande à un alias? Voici un exemple:

 alias mkcd = 'mkdir $ 1;  cd $ 1; '

Mais dans ce cas le $ xx se traduit à l’heure de création de l’alias et non à l’exécution. J’ai cependant créé une solution de contournement en utilisant une fonction shell (après un peu de recherche sur Google), comme ci-dessous:

 fonction mkcd () {
   mkdir $ 1
   cd $ 1
 }

Je voulais juste savoir s’il existe un moyen de créer des alias acceptant les parameters CL.
BTW – J’utilise ‘bash’ comme shell par défaut.

Vous avez trouvé le moyen: créer une fonction au lieu d’un alias. Le shell C a un mécanisme pour faire des arguments aux alias, mais bash et le shell Korn ne le font pas, car le mécanisme de fonction est plus flexible et offre la même capacité.

Juste pour réitérer ce qui a été posté pour d’autres coquillages, dans Bash les travaux suivants:

 alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah' 

Exécuter ce qui suit:

 blah one two 

Donne la sortie ci-dessous:

 First: one Second: two 

Vous ne pouvez pas dans ksh, mais vous pouvez dans csh.

 alias mkcd 'mkdir \!^; cd \!^1' 

Dans ksh, la fonction est la voie à suivre. Mais si vous vouliez vraiment utiliser un alias:

 alias mkcd='_(){ mkdir $1; cd $1; }; _' 

Pour citer la page de manuel bash:

Il n’y a pas de mécanisme pour utiliser des arguments dans le texte de remplacement. Si des arguments sont nécessaires, une fonction shell doit être utilisée (voir FONCTIONS ci-dessous).

Il semble donc que vous ayez répondu à votre propre question – utilisez une fonction au lieu d’un alias

Vous pouvez également trouver cette commande utile:

mkdir dirname && cd $_

où dirname est le nom du répertoire que vous voulez créer

Vous ne pouvez pas réellement faire ce que vous voulez avec les alias Bash, car les alias sont statiques. Utilisez plutôt la fonction que vous avez créée.

Regardez ici pour plus d’informations: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/ . (Oui, je sais que c’est mactips.org, mais c’est à propos de Bash, alors ne vous inquiétez pas.)

J’ai trouvé que les fonctions ne peuvent pas être écrites dans le fichier ~ / .cshrc .. Ici, dans un alias qui prend des arguments

Par exemple, les arguments passés à la commande ‘find’

 alias fl "find . -name '\!:1'" Ex: >fl abc 

où abc est l’argument passé comme!: 1

Cela fonctionne dans ksh:

 $ alias -x mkcd="mkdir \$dirname; cd \$dirname;" $ alias mkcd mkcd='mkdir $dirname; cd $dirname;' $ dirname=aaa $ pwd /tmp $ mkcd $ pwd /tmp/aaa 

L’option “-x” rend l’alias “exporté” – l’alias est visible dans les sous-couches.

Et soyez conscient du fait que les alias définis dans un script ne sont pas visibles dans ce script (car les alias sont développés lorsqu’un script est chargé et non lors de l’interprétation d’une ligne). Cela peut être résolu en exécutant un autre fichier de script dans le même shell (en utilisant un point).

Le plus simple est d’utiliser la fonction et non l’alias. vous pouvez toujours appeler une fonction à tout moment depuis le cli. En bash, vous pouvez simplement append la fonction name () {command} elle se charge comme un alias.

 function mkcd() { mkdir $1; cd $1 ;} 

Pas sûr des autres coquillages

Je pense que vous pouvez le faire avec les fonctions shell si vous utilisez bash: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/

Voici un exemple simple de fonction utilisant python. Vous pouvez restr dans ~ / .bashrc
Tu dois avoir un espace après le premier support bouclé gauche
La commande python doit être entre guillemets pour obtenir la substitution de variable
N’oubliez pas ce point-virgule à la fin

function count () {python -c “pour num dans xrange ($ 1): print num”;}

 $ count 6 0 1 2 3 4 5 $ 

Un alias vide exécutera ses arguments:

 alias DEBUG=