/ / Comment puis-je citer ou grouper automatiquement des arguments de ligne de commande pour un alias dans bash? - bash, alias

Comment puis-je automatiquement citer ou grouper des arguments de ligne de commande pour un alias dans bash? - bash, alias

J'ai un script qui prend une commande et l'exécute sur un hôte distant. Cela fonctionne bien, par exemple:

$ rexec "ant build_all"

exécutera la commande "ant build_all" sur le système distant (en le passant par SSH, etc.).

Parce que je suis paresseux, je veux créer un alias pour cette commande (et finalement, plusieurs autres), tel que, par exemple, je puisse simplement appeler

$ rant build_all

et bash il invoquera automatiquement

$ rexec "ant build_all"

J'ai essayé de le faire avec un alias, mais si je définis

alias rant=rexec ant

alors tous les arguments passés à "rant" seront simplement ajoutés à la fin, comme ceci:

$ rant build_all -Dtarget=Win32
(interpreted as:)
$ rexec "ant" build_all -Dtarget=Win32

Cela échoue, car rexec ne prend en réalité qu'un argument et ignore les autres.

Je pourrais probablement le faire avec un wrapper bashscript, mais je me demandais si bash disposait de fonctions intégrées pour le faire pour moi, peut-être une version de pseudonyme à arguments nommés, ou une commande de chaîne de guillemet ressemblant à perl (par exemple, qw / /), ou quelque chose de ce genre.

Réponses:

3 pour la réponse № 1

Pour tous les arguments, cela fonctionnera.

function rant () {
rexec "ant $*"
}

Vous devrez peut-être ajuster la citation en fonction des arguments que vous transmettez.


2 pour la réponse № 2

J'ai fini par utiliser la réponse de Ken G, mais une meilleure: définir rex en tant que fonction, comme ceci:

function rex {
run_remote.sh -c "$*"
}

m'a permis d'utiliser ensuite rexec dans les alias, comme ceci:

alias rant="rex ant"

et toujours envelopper les arguments de la façon dont j'ai besoin d'eux.

J'ai oublié que je pouvais utiliser des fonctions comme celle-là dans bash. Cela fait exactement ce dont j'avais besoin, sans avoir à créer un script wrapper.

Excellent conseil, merci!

edit: "rexec" a été remplacé par "rex", car j’ai découvert que mon système possédait déjà un programme appelé "rexec"


0 pour la réponse № 3

Vous pouvez le faire comme une fonction, pas comme un alias:

function rant { rexec "ant $1"; }

Vous pouvez l'appeler en ligne de commande comme un alias