Est-il possible de faire ce qui suit ?
Je veux exécuter ce qui suit :
mongodb bin/mongod
Dans mon bash_profile j'ai
alias = "./path/to/mongodb/$1"
Est-il possible de faire ce qui suit ?
Je veux exécuter ce qui suit :
mongodb bin/mongod
Dans mon bash_profile j'ai
alias = "./path/to/mongodb/$1"
Un alias se développera jusqu'à la chaîne qu'il représente. Tout ce qui suit l'alias apparaîtra après son expansion sans avoir besoin d'être ou pouvoir être passé comme argument explicite (ex. $1
).
$ alias foo='/path/to/bar'
$ foo some args
sera étendu à
$ /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 aviez fait
$ /path/to/bar abc 123 fixed args
Pour annuler la définition d'un alias :
unalias foo
Pour annuler la définition d'une fonction :
unset -f foo
Pour voir le type et la définition (pour chaque alias, mot-clé, fonction, buildin ou fichier exécutable défini) :
type -a foo
Ou type seulement (pour l'occurrence de la plus haute priorité) :
type -t foo
Pour utiliser les paramètres dans les alias, j'utilise cette méthode :
alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'
c'est une fonction auto-destructrice enveloppée dans un alias, donc c'est à peu près le meilleur des deux mondes, et ne prend pas une ou plusieurs lignes supplémentaires dans vos définitions... ce que je déteste, oh oui et si vous avez besoin de cette valeur de retour, vous devrez la stocker avant d'appeler unset, et ensuite retourner la valeur en utilisant le mot clé "return" dans cette fonction auto-destructrice là :
alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'
donc..
vous pourriez, si vous avez besoin d'avoir cette variable là-dedans
alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'
bien sûr...
alias mongodb='./path/to/mongodb/'
ferait en fait la même chose sans avoir besoin de paramètres, mais comme je l'ai dit, si vous les vouliez ou 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. S'il y a plus d'une ligne, vous pourriez envisager d'écrire simplement une fonction, car cela deviendrait de plus en plus gênant au fur et à mesure que la ligne s'agrandit. Les fonctions sont géniales car elles permettent de bénéficier de tous les avantages qu'elles offrent (voir completion, traps, bind, etc. pour les avantages que les fonctions peuvent fournir, dans la page de manuel de bash).
J'espère que cela vous aidera :)
Sur csh (par opposition à bash ) vous pouvez faire exactement ce que vous voulez.
alias print 'lpr \!^ -Pps5'
print memo.txt
La notation \!^
fait en sorte que l'argument soit inséré dans la commande à ce moment-là.
Le site !
est précédé d'un caractère \
pour éviter qu'elle soit interprétée 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 .)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.