Récupérer le quoting des arguments

Daniel Caillibaud ml at lairdutemps.org
Mon Dec 7 18:28:05 CET 2015


Le 07/12/15 à 16:16, Marc Chantreux <khatar at phear.org> a écrit :

MC> On Mon, Dec 07, 2015 at 03:32:32PM +0100, Daniel Caillibaud wrote:
MC> > Mais je ne veux pas quoter tous les arguments, juste récupérer les quotes telles qu'elles
MC> > étaient dans la ligne de commande initiale, car si je récupère bien un seul
MC> > argument (sans les quotes)
MC> >   --rsh=/usr/bin/ssh -i /path/to/id_rsa
MC> > le passer à rsync avec 
MC> >   rsync "--rsh=/usr/bin/ssh -i /path/to/id_rsa"
MC> > ne va pas donner l'effet escompté 
MC> 
MC> ... 
MC> 
MC> pourquoi ca ? les quotes ne sont la que pour délimiter une zone ou tu
MC> n'as pas besoin de proteger individuellement les chars (il faut se
MC> rappeller que l'expansion est faite *avant* execution)

Tu as raison, j'ai encore écrit une ânerie.

MC> donc pour ton shell, toutes ces chaines sont identiques:
MC> 
MC> --rsh='/usr/bin/ssh -i /path/to/id_rsa' 
MC> '--rsh=/usr/bin/ssh -i /path/to/id_rsa'
MC> --rsh=/usr/bin/ssh' -i /path/to/id_rsa'
MC> --rsh=/usr/bin/ssh\ -i '/path/to/id_rsa' 
MC> 
MC> du coup je suis pas sur de comprendre ta question:

Je me demandais juste si y'avait un ${truc} pour récupérer la commande complète "telle quelle",
éventuellement avec un autre shell que bash.

MC> pourrais-tu tenter d'écrire un cas simple d'un truc qui foire a tes
MC> yeux? (si tu utilisais uze, je te proposerais bien d'écrire un test...)  

J'essayais justement de formuler la question pour sortir de mon petit problème ponctuel.

La question n'était pas tant de le résoudre que d'apprendre un truc sur le shell, qui est
davantage l'objet de la liste ;-)


Mais puisque tu insiste, voici le cas qui foire et m'amènenait à la question :

(dans benice.sh, qui a des alias en symlinks benice_cp, benice_rm, benice_rsync, …)

me=$(basename $0)
[ "$me" == "benice.sh" ] && commande="$@" || commande="${me#*benice_} $@"
$commande && …

mais si je le réécris avec

[ "$me" == "benice.sh" ] && commande="" || commande="${me#*benice_}"
$commande $@ && …

ça devrait régler ce problème.


-- 
Daniel

Apprendre a mourir ! Et pourquoi donc ? 
On y réussit très bien la première fois !
Chamfort


More information about the Shell mailing list