web-dev-qa-db-fra.com

Passer l'argument à un alias dans bash

Est-il possible de faire ce qui suit:

Je veux exécuter ce qui suit:

mongodb bin/mongod

Dans mon profil bash j'ai

alias = "./path/to/mongodb/$1"
115
slik

Un alias sera étendu à la chaîne qu'il représente. Tout ce qui se trouve après l’alias apparaîtra après son développement sans avoir besoin d’être un argument explicite (par exemple, $1).

$ alias foo='/path/to/bar'
$ foo some args

sera élargi à

$ /path/to/bar some args

Si vous voulez utiliser des arguments explicites, vous devrez utiliser une fonction

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

sera exécuté comme si vous l'aviez fait

$ /path/to/bar abc 123 fixed args

Pour définir un alias:

unalias foo

Pour annuler une fonction:

unset -f foo

Pour voir le type et la définition (pour chaque alias, mot-clé, fonction, fichier intégré ou exécutable défini):

type -a foo

Ou tapez uniquement (pour l'occurrence de priorité la plus élevée):

type -t foo
214
Dennis Williamson

Habituellement, lorsque je veux passer des arguments à un alias dans Bash, j'utilise une combinaison d'un alias et d'une fonction comme celle-ci, par exemple:

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               
21
leed25d

pour utiliser des paramètres dans des alias, j'utilise cette méthode:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

c'est une fonction autodestructrice enveloppée dans un alias, donc c'est à peu près le meilleur des deux mondes, et ne prend pas une ligne supplémentaire dans vos définitions ... que je déteste, ah oui et si vous avez besoin de ce retour valeur, vous devrez la stocker avant d'appeler unset, puis renvoyer la valeur à l'aide du mot clé "return" dans cette fonction auto-destructive:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

alors..

vous pouvez, si vous avez besoin d'avoir cette variable là

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

bien sûr...

alias mongodb='./path/to/mongodb/'

ferait la même chose sans avoir besoin de paramètres, mais comme je l'ai dit, si vous en aviez besoin ou que vous en aviez besoin pour une raison quelconque (par exemple, vous aviez besoin de 2 $ au lieu de 1 $), vous auriez besoin d'utiliser un wrapper comme celui-ci. Si elle est supérieure à une ligne, vous pouvez envisager d'écrire simplement une fonction car elle deviendrait de plus en plus horrible à mesure qu'elle grandissait. Les fonctions sont excellentes puisque vous obtenez tous les avantages qu’elles apportent (voir achèvement, traps, bind, etc. pour connaître les goodies que les fonctions peuvent fournir, dans la page de manuel bash).

J'espère que ça vous aide :)

19
osirisgothra

C'est la solution qui peut éviter d'utiliser la fonction:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

résultat du test

addone 200
input: 200
result:201
7
blreay

En csh (par opposition à bash ), vous pouvez faire exactement ce que vous vouloir.

alias print 'lpr \!^ -Pps5'
print memo.txt

La notation \!^ provoque l’insertion de l’argument dans la commande à ce stade.

Le ! le caractère est précédé d'un \ pour l'empêcher d'être interprété comme une commande d'historique.

Vous pouvez également passer plusieurs arguments:

alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps

(Exemples tirés de http://unixhelp.ed.ac.uk/Shell/alias_csh2.1.html .)

3
jimgug