Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#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 big_smile

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.


Voyager 12.04 LTS (Xubuntu) sur HP Pavilion t728.fr
Precise Pangolin 64 bits sur Acer aspire 5738ZG
Voyager 13.04 sur TOSHIBA  Satellite C870-196.
Faîtes la mise à jour de vos P.P.A. automatiquement

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 wink, 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

soupaloignon a écrit :

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

Haut de page ↑