#1 Le 17/11/2013, à 14:32
- soupaloignon
Variable dans une ligne de commande ne fonctionne pas
Bonjour à tous,
Je bricole un petit script dont une des parties doit me créer une suite de dossier. Pour cela j'utilise la commande
mkdir {a..f} ou mkdir {1..20}
suivant les besoins.
Si je lance la commande en l'état dans un terminal, cela fonctionne sans problème. Par contre si je met des variables
mkdir {$entree..$sortie}
, dont je récupère les valeurs d'entrées et de sortie dans zenity, cela ne fonctionne plus ( j'ai essayé d'encadrer des composants de la ligne avec des doubles et simples quotes + d'autres caractères, mais rien n'y fait)
Quelqu'un a une idée ?
Merci d'avance
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#2 Le 17/11/2013, à 14:50
- pingouinux
Re : Variable dans une ligne de commande ne fonctionne pas
Bonjour,
Il semble que ce ne soit pas possible.
Édité : On peut s'en sortir avec l'utilisation de eval (commande potentiellement dangereuse)
$ entree=A; sortie=F
$ eval mkdir {$entree..$sortie}
$ ls
A B C D E F
Dernière modification par pingouinux (Le 17/11/2013, à 15:06)
Hors ligne
#3 Le 17/11/2013, à 14:58
- soupaloignon
Re : Variable dans une ligne de commande ne fonctionne pas
Bonjour pingouinux, et merci pour ta réponse, même si il s'avère que cela ne soit pas possible.
Au delà de ça, après plus d'une dizaine d'années sous Linux, je découvre enfin quelque chose qu'il n'est pas possible de faire, je commençais à désespérer
Pour reprendre un mode plus sérieux, est ce qu'il y aurait un autre bout de code pour faire cela avec des variables ? J'en ai un
mkdir `seq -w $entree $sortie`
mais qui ne peut générer que des séquences de chiffres, pas de lettres. L'autre code était plus intéressant, puisque il gère aussi bien les chiffres que les lettres
Dernière modification par soupaloignon (Le 17/11/2013, à 15:00)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#4 Le 17/11/2013, à 15:05
- metalux
Re : Variable dans une ligne de commande ne fonctionne pas
eval le permet:
extrait du man: Exécute des arguments comme s'ils étaient une commande du shell.
eval mkdir {"$entree".."$sortie"}
Je n'ai jamais utilisé eval, du coup je vous laisse commenter si je fais erreur mais ça semble fonctionner.
Hors ligne
#5 Le 17/11/2013, à 15:08
- pingouinux
Re : Variable dans une ligne de commande ne fonctionne pas
J'ai complété ma réponse #2, pendant que metalux rédigeait la sienne.
Hors ligne
#6 Le 17/11/2013, à 15:13
- soupaloignon
Re : Variable dans une ligne de commande ne fonctionne pas
Merci pour vos réponses à tous les 2. Effectivement cela fonctionne bien avec eval.
Mais la question suivante, et j'imagine que tu t'y attendais pingouinux , pourquoi cette commande est elle dangereuse ?
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#7 Le 17/11/2013, à 16:10
- credenhill
Re : Variable dans une ligne de commande ne fonctionne pas
hello
$ ls
$ mkdir $(a=a; b=t; bash -c "echo {$a..$b}")
$ ls -F
a/ b/ c/ d/ e/ f/ g/ h/ i/ j/ k/ l/ m/ n/ o/ p/ q/ r/ s/ t/
Hors ligne
#8 Le 17/11/2013, à 20:05
- pingouinux
Re : Variable dans une ligne de commande ne fonctionne pas
pourquoi cette commande est elle dangereuse ?
Il faut être sûr de ce qui se trouve derrière eval. Ce pourrait être, par exemple, une variable d'environnement contenant une commande effaçant ton disque dur. C'est équivalent à exécuter un script sans savoir ce qu'il contient.
Hors ligne