Question

    

Cette question a déjà une réponse ici:

    
            
  •              Faire un alias Bash qui prend un paramètre?                                      13 réponses                          
  •     
    

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"
Était-ce utile?

La solution

alias Un étendra à 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 transmis comme arguments explicites (par exemple $1).

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

va s'étendue à

$ /path/to/bar some args

Si vous voulez utiliser des arguments explicites, vous aurez besoin d'utiliser une fonction

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

sera exécutée comme si vous aviez fait

$ /path/to/bar abc 123 fixed args

Pour un alias annuler la définition:

unalias foo

Pour annuler la définition d'une fonction:

unset -f foo

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

type -a foo

Ou taper uniquement (pour l'occurrence la plus haute priorité):

type -t foo

Autres conseils

En général, quand je veux passer des arguments à un alias dans Bash, j'utilise une combinaison d'un alias et une fonction comme celui-ci, par exemple:

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

alias t2d='__t2d'                                                               

pour utiliser des paramètres dans les alias, i utilise cette méthode:

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

sa fonction d'auto-destructrice enveloppé dans un alias, il à peu près est le meilleur des deux mondes, et ne prend pas en une ligne supplémentaire (s) dans vos définitions ... que je déteste, oh oui, et si vous besoin que la valeur de retour, vous devrez l'enregistrer avant d'appeler unset, puis retourner la valeur en utilisant le mot-clé « retour » dans cette auto fonction destructrice il:

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

..

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/'

serait en fait faire la même chose sans avoir besoin de paramètres, mais comme je l'ai dit, si vous vouliez ou besoin d'eux pour une raison quelconque (par exemple, vous aviez besoin de 2 $ au lieu de 1 $), vous devez utiliser un wrapper comme ça . Si elle est plus grande d'une ligne que vous pourriez envisager d'écrire simplement une fonction pure et simple car il deviendrait plus d'une pollution visuelle comme il grossissait. Les fonctions sont super car vous obtenez tous les avantages que les fonctions donnent (voir achèvement, les pièges, se lient, etc pour les goodies que les fonctions peuvent fournir, dans la page de manuel bash).

J'espère que vous aide:)

Ceci 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

csh (par opposition à bash ) vous pouvez faire exactement ce que vous voulez.

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

Le \!^ de notation provoque l'argument à insérer dans la commande à ce point.

Le caractère ! est précédée par un \ pour l'empêcher d'être interprété comme une commande 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 .)

Pour simplifier la réponse de leed25d, utilisez une combinaison d'un alias et une fonction. Par exemple:

function __GetIt {
    cp ./path/to/stuff/$* .
}

alias GetIt='__GetIt'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top