Bonjour, bonsoir,
Comment peut-on exécuter le script contenu dans une variable ?
Avec les fonctions composées d'une seule partie ça fonctionne :
var="echo salut"
$var
salut
Mais dès qu'on utilise des fonctions plus compliquées, bash ne comprend plus :
var="for ((i=0,i<9,i+=1)); do echo $i; done"
$var
bash: for: command not found
De même pour :
while if ...
Merci de votre lecture !
# boucle for qui ne fonctionne pas
Posté par NeoX . Évalué à 2.
deja ta boucle for seule ne fonctionne pas chez moi
ensuite ca fait comme pour toi.
j'ai reecrit ce que tu voulais faire.
ne fonctionne pas
par contre
fonctionne
[^] # Re: boucle for qui ne fonctionne pas
Posté par mistiru . Évalué à 1.
Pour ma syntaxe, je me suis trompé : c'est avec des ';' et pas des ','
J'avais pensé à eval, mais j'ai pas fait attention et j'ai marqué :
var="…"
au lieu de :
var='…'
Du coup, quand je faisait eval, j'obtenais :
10
10
10
…
au lieu de :
0
1
2
…
Merci !!
[^] # Re: boucle for qui ne fonctionne pas
Posté par frayd . Évalué à -1.
ce sont des points-virgules et non des virgules qu'il faut dans cette syntaxe de for (comme en C) :
[^] # Re: boucle for qui ne fonctionne pas
Posté par totof2000 . Évalué à 2. Dernière modification le 27 mars 2013 à 15:03.
en bas, plutot que for + initialisation/incrément de variable de boucle, il y a seq.
[^] # Re: boucle for qui ne fonctionne pas
Posté par MarbolanGos (site web personnel) . Évalué à 4.
Il y a aussi:
[^] # Re: boucle for qui ne fonctionne pas
Posté par frayd . Évalué à 1.
pas dit que c'était bien d'utiliser for,
juste rectifié la syntaxe, avant de voir que mistiru l'avait déjà fait (d'où le moinssage mérité :-)
Perso, j'emploie seq. Et si on part de 1,
seq 9
ou $(seq 9) suffit, "1" est le défaut.[^] # Re: boucle for qui ne fonctionne pas
Posté par totof2000 . Évalué à 2.
Ce n'était qu'une suggestion …
[^] # Re: boucle for qui ne fonctionne pas
Posté par ✅ ffx . Évalué à 1.
Et du coup
mytest='eval for i in
seq 1 9
; do echo $i; done'$mytest
fonctionne aussi
# Fonction auxiliaire
Posté par Michaël (site web personnel) . Évalué à 1.
Tu peux effectivement utiliser
eval
mais le mieux est d'écrire une fonction auxiliaire — ne serait-ce que parceque c'est plus facile d'écrire ta fonction que ton script entre guillemets![^] # Re: Fonction auxiliaire
Posté par mistiru . Évalué à 0.
Le problème, c'est que la fonction que je récupère entre guillemets, le programme la reçoit d'un autre programme par un fifo. Mais merci quand même !
[^] # Re: Fonction auxiliaire
Posté par NeoX . Évalué à 0.
wouah, tu veux dire que plutot que de passer une simple info d'un programme à l'autre, tu veux lui passer des bouts de programmes complets ?
j'ai du loupé une etape mais ce n'est pas trop le principe de communication interprocessus.
[^] # Re: Fonction auxiliaire
Posté par Christophe . Évalué à 3.
Ben l'info, c'est le bout de programme lui-même, je ne vois pas ce qu'il y a de choquant. C'est exactement le même principe qu'avec le web et javascript.
[^] # Re: Fonction auxiliaire
Posté par Michaël (site web personnel) . Évalué à 2.
Dans ce cas je te recommandes plutôt de sauver le bout de programme dans un fichier que tu sources (opérateur
.
) ou que tu appelles dans un sous-shell: c'est plus facile à écrire et plus facile à debugger et en plus tu peux utiliser un programme auxiliaire pour valider l'entrée.[^] # Re: Fonction auxiliaire
Posté par mistiru . Évalué à 0.
Dsl en fait j'ai pas tout dis mais justement, je me suis renseigné sur les fifo pour Eviter le passage par des fichiers ^ à cause des fichiers, mes programmes étaient obligés de fonctionner en boucles et les procs n'aimaient pas :s
Mais merci !
[^] # Re: Fonction auxiliaire
Posté par Michaël (site web personnel) . Évalué à 3.
Il y a deux choses: 1. le passage d'information ou la synchronisation, 2. et l'utilisation de cette information.
Tu peux utilsier un fifo pour synchroniser ou échanger l'information, puis la placer dans un fichier avant de la sourcer ou de l'éxécuter.
Sinon tu peux mettre au point un protocole
[^] # Re: Fonction auxiliaire
Posté par mistiru . Évalué à 1.
Ah ouai, j'avais pas pensé à ça… Du coup les programmes fonctionnent de la même manière (ils attendent un message de fifo), mais ce message est beaucoup plus léger, et le programme est sur de fonctionner ! Eh bien je te remercie beaucoup pour l'astuce : Merci beaucoup !
[^] # Re: Fonction auxiliaire
Posté par Michaël (site web personnel) . Évalué à 3.
Là où tu vas beaucoup gagner, c'est quand tu vas devoir deboguer les bouts de programmes que tu échanges. Si le bout de programme est stocké dans un fichier, il est plus facile à lire ou à tester petit bout par petit bout que s'il est dans une variable.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.