Comment passer des arguments de ligne de commande à un alias de shell ?
Question
Comment transmettre les arguments de ligne de commande à un alias ?Voici un exemple :
alias mkcd='mkdir $1; cd $1;'
Mais dans ce cas, le $xx est traduit au moment de la création de l'alias et non au moment de l'exécution.J'ai cependant créé une solution de contournement en utilisant une fonction shell (après avoir cherché un peu sur Google) comme ci-dessous :
function mkcd(){ mkdir $1 cd $1 }
Je voulais juste savoir s'il existe un moyen de créer des alias qui acceptent les paramètres CL.
BTW - J'utilise 'bash' comme shell par défaut.
La solution
Vous avez trouvé le chemin: créer une fonction au lieu d'un alias. La coque C a un mécanisme pour faire des arguments aux alias, mais bash et le shell Korn ne le font pas, parce que le mécanisme de fonction est plus souple et offre la même capacité.
Autres conseils
Juste pour répéter ce qui a été écrit pour d'autres coquilles, Bash les travaux suivants:
alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah'
L'exécution de ce qui suit:
blah one two
donne la sortie ci-dessous:
First: one
Second: two
Vous ne pouvez pas ksh, mais vous pouvez csh.
alias mkcd 'mkdir \!^; cd \!^1'
En ksh, la fonction est le chemin à parcourir. Mais si vous avez vraiment voulu vraiment utiliser 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 arguments sont nécessaires, une fonction shell doit être utilisé (voir FONCTIONS ci-dessous).
Il semble donc que vous avez répondu à votre propre question - utiliser 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
La meilleure façon est d'utiliser la fonction non alias. vous pouvez toujours appeler une fonction à tout moment de la cli. En bash, vous pouvez simplement ajouter le nom de la fonction () {commande} il charge même comme un alias.
function mkcd() { mkdir $1; cd $1 ;}
Je ne sais pas d'autres coquilles
Vous pouvez pas vraiment faire ce que vous voulez avec des alias Bash, car les alias sont statiques. Au lieu de cela, utilisez la fonction que vous avez créé.
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 il est à peu près Bash, alors ne vous inquiétez pas.)
Je trouve que les fonctions ne peuvent pas être écrites dans ~ / .cshrc .. Ici alias qui prend des arguments
par exemple, les arguments passés à la commande 'trouver'
alias fl "find . -name '\!:1'"
Ex: >fl abc
où abc est l'argument passé comme: 1
Cela fonctionne en 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-shell.
Et sachez 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é, pas lorsqu'une ligne est interprétée).Cela peut être résolu en exécutant un autre fichier de script dans le même shell (en utilisant dot).
Je pense que vous êtes en mesure de le faire avec des fonctions shell si vous utilisez bash: http://www.cyberciti.biz/faq/ Linux passer à argument-unix-alias-commande /
Voici une fonction simple exemple en utilisant python. Vous pouvez coller dans ~ / .bashrc
Tu dois avoir un espace après la première accolade gauche
La commande python doit être entre guillemets pour obtenir la substitution de variable
Ne pas oublier que virgule à la fin
Nombre de function () {python -c "pour num en xrange (1 $): print num";}
$ count 6
0
1
2
3
4
5
$
Un alias vide exécutera ses args:
alias DEBUG=