Re: [SSFR] Execution de variables dans bash

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


On Fri, Jul 27, 2007 at 10:00:00AM +0200, L B wrote:
> J'ai l'impression que le fait d'exécuter avec `` me fait n'importe quoi dans
> les quotes de ma commande.

non plutot que faire n'importe quoi le shell commence par differencier
les simples commandes des pipelines puis des lists, etc, bref il 
respecte sa grammaire apres quoi il applique les expansions ;)

ce qui donne:

touch A B
X="ls A B | head -1"
$X # grammaticalement c'est une simple commande
   # donc '|', 'head' et '-1' sont considerés comme des arguments de
   # 'ls'; '-1' etant par ailleur une option de 'ls' pouvant apparaitre
   # n'importe ou dans la liste d'arguments il ne rapporte pas d'erreur
   # pour celui-ci et prend simplement en compte cette option

ls: ne peut accéder |: Aucun fichier ou répertoire de ce type
ls: ne peut accéder head: Aucun fichier ou répertoire de ce type
A
B

# -1 provoque l'affichage en colonne.

tu peux (au choix):

1) definir TICKET_ID comme une fonction:

TICKET_ID () { data | format ; }
TICKET_ID2="$($TICKET_ID)"

sachant que les valeurs de TICKET_SUBJECT et RTPATH seront prises dans
l'environnement au moment ou sera evalué la fonction et non au moment
de sa definition.

2) evaluer ta variable contenant un pipeline:

TICKET_ID="data | format"
TICKET_ID2="$(eval $TICKET_ID)"

sachant que si les variables telles TICKET_SUBJECT viennent de
l'exterieur leurs valeurs peuvent entrainer l'execution de code
arbitraire, par contre l'expansion de "data" auras bien lieu
au moment de la definition de TICKET_ID.

3) separer la commande te fournissant les données du formatage de ces
   dernieres ceci te permettant d'avoir une simple commande a la place
   d'un pipeline.

TICKET_ID="data"
TICKET_ID2="$($TICKET_ID | format)"

liste non exhaustive...

-- 
pwet
-- 
klapwet





Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/