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

4

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

motam79
la source

Réponses:

11

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 invoquer my_alias filename pour obtenir le même résultat. Il n'y a aucun moyen de remplacer my_alias avec une autre corde si --flag1 apparaît à 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 plus de paramètres de position ou "$@", 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?

Kamil Maciorowski
la source
Pour le général "mieux connaître bash" - tldp.org - & gt; guides - & gt; cherchez "Bash", il y en a au moins deux qui valent la peine de lire.
Hannu