web-dev-qa-db-fra.com

Comment créer un alias qui prend un argument de position dans Linux bash?

Disons que j'ai une commande bash avec quelques options et la variable qui m'intéresse (par exemple, nom de fichier):

my_cmd option1 option2 filename

J'ai créé un alias:

alias my_cmd_12="my_cmd option1 option2"

cela me permet de supprimer toutes les options en tapant. Cependant, il y a des drapeaux venant après la variable qui m'intéresse (par exemple, nom de fichier):

my_cmd option1 option2 filename --flag1

Comment créer un alias qui prend toutes les options et tous les drapeaux:

my_alias filename est équivalent à

my_cmd option1 option2 filename --flag1

5
motam79

Vous ne pouvez pas faire cela avec un alias. Alias ​​fonctionne en remplaçant chaîne par une autre chaîne. Avec cet alias défini

alias my_cmd_12="my_cmd option1 option2"

my_cmd_12 filename --flag1 va s'étendre à

my_cmd option1 option2 filename --flag1

Mais vous voulez appeler my_alias filename pour obtenir le même résultat. Il n'y a aucun moyen de remplacer my_alias par une autre chaîne afin que --flag1 apparaisse à la fin .

Cependant, une fonction devrait fonctionner:

my_function() { my_cmd option1 option2 "$1" --flag1; }

Notez qu'il ne s'agit que d'une solution minimale adaptée à votre exemple. En général, vous pouvez utiliser davantage de paramètres de position ou "$@", d'instructions conditionnelles, etc., selon vos besoins. Les fonctions sont beaucoup plus souples que les alias.

Plus d'informations ici: Dans Bash, quand alias, quand écrire un script et quand écrire une fonction?

11
Kamil Maciorowski