Salut à tous, A nouveau problème nouveau thread et nouveau casse-tête (bien réel celui-là): A="\"1 2 3\" \"4 5 6\"" bash -c "echo \$0 - \$1" $A nous donne: "1 - 2 Comment obtenir 1 2 3 - 4 5 6 ? indice: bash -c "echo \$0 - \$1" `eval echo $A donne: 1 - 2 A vos crayon je ramasse les copies dans 1H ;) Vous avez le droit de changer la déclaration de A. Votre script doit être compatible bash. Florent G.,
Florent Guiliani a écrit :
A="\"1 2 3\" \"4 5 6\"" bash -c "echo \$0 - \$1" $A
nous donne: "1 - 2 Comment obtenir 1 2 3 - 4 5 6 ?
Première solution: IFS=, A="1 2 3,4 5 6" bash -c "echo \$0 - \$1" $A nous donne 1 2 3 - 4 5 6 je me demande s'il y a une solution sans changer IFS Florent,
On 2006-01-23 17:34:37 +0100, Florent Guiliani wrote:
Florent Guiliani a écrit :
A="\"1 2 3\" \"4 5 6\"" bash -c "echo \$0 - \$1" $A
nous donne: "1 - 2 Comment obtenir 1 2 3 - 4 5 6 ?
Première solution: IFS=, A="1 2 3,4 5 6" bash -c "echo \$0 - \$1" $A
nous donne 1 2 3 - 4 5 6 je me demande s'il y a une solution sans changer IFS
Aucune idée. C'est pour ça que les tableaux de zsh, c'est mieux. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / SPACES project at LORIA
salut a tous ! Vincent Lefevre a écrit :
On 2006-01-23 17:34:37 +0100, Florent Guiliani wrote:
Florent Guiliani a écrit :
[snip]
nous donne 1 2 3 - 4 5 6 je me demande s'il y a une solution sans changer IFS
Aucune idée. C'est pour ça que les tableaux de zsh, c'est mieux.
Y'en a, mais attentioin le redecoupage peut intervenir a 2 niveaux 1) l'appelant 2) l'appel'e C'est pour ca que l'appel'e DOIT utiliser "$0" "$1" etc ou "$@" avec les " (sauf si on veut qu'il redecoupe bien sur) Pour proteger dans l'appelant, la solution la plus simple passe en effet par des tableaux, nomm'es ou non a[0]='1 2 3' a[1]='2 3 4' bash -c 'echo "$0" - "$1"' "${a[@]}" ou encore set -- '1 2 3' '2 3 4' bash -c 'echo "$0" - "$1"' "$@" Bref, les tableaux c'est pas mal meme sous bash/ksh le tout c'est d' avoir la syntaxe pour ne pas provoquer un redecoupage des *elements* du tableau Sinon, y'a des trucs vachement plus compliques a base de printf %q et eval, mais bon... Christophe PS je travaille pour ma chapelle, ma libsh a la con de la mort qui tue a tout un tas de truc concernant la gestion des tableaux... Pour creer le tableau a, on pourrait ecrire des trucs de ce genre : tabajoute a '1 2 3' tabajoute a '2 3 4' ou bien tableau a '1 2 3' '2 3 4' tabajoute a '5 6 7' '8 9 10' http://schplurtz.free.fr/schplurtziel
On 2006-01-24 11:34:51 +0100, Christophe Martin wrote:
Bref, les tableaux c'est pas mal meme sous bash/ksh le tout c'est d' avoir la syntaxe pour ne pas provoquer un redecoupage des *elements* du tableau
Sinon, y'a des trucs vachement plus compliques a base de printf %q et eval, mais bon...
Ouais, mais la solution des tableaux n'est pas une solution POSIX. Maintenant, pour ce que ça vaut...
je travaille pour ma chapelle, ma libsh a la con de la mort qui tue a tout un tas de truc concernant la gestion des tableaux...
On peut aussi appeler perl depuis le shell. :) -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Re, Vincent Lefevre a écrit :
Ouais, mais la solution des tableaux n'est pas une solution POSIX. Maintenant, pour ce que ça vaut... Je ne connais pas de systeme n'ayant pas de shell ne supportant pas les tableaux (ou l'inverse ;-). Meme dans ce cas il reste "set -- '1 2 3' '4 5 6'" et "$@" que seuls quelques shells tres decerebres ne supportent pas... alors on peut faire : set blabla '1 2 3' '4 5 6' shift bash -c 'kjhjkjkhk' "$@" Maintenant, si c'est un pb de certification, je viens de verifier : set -- '1 2 3' '4 5 6' bash -c 'echo "$0" - "$1"' "$@" C'est POSIX et ca change pas l'IFS. Ce qui etait le pb de depart...
Christophe
On 2006-01-24 18:07:30 +0100, Christophe Martin wrote:
Vincent Lefevre a écrit :
Ouais, mais la solution des tableaux n'est pas une solution POSIX. Maintenant, pour ce que ça vaut... Je ne connais pas de systeme n'ayant pas de shell ne supportant pas les tableaux (ou l'inverse ;-).
Le shell de Solaris ne supporte pas les tableaux (et n'est pas POSIX non plus). La solution est peut-être d'exécuter, si ça échoue, un ksh depuis le script en #!/bin/sh sur la suite du script, mais je ne sais pas comment faire.
Meme dans ce cas il reste "set -- '1 2 3' '4 5 6'" et "$@" que seuls quelques shells tres decerebres
Ce n'est pas propre de changer le $0 dans ces conditions. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Vincent Lefevre a écrit :
On 2006-01-24 18:07:30 +0100, Christophe Martin wrote:
Vincent Lefevre a écrit :
Ouais, mais la solution des tableaux n'est pas une solution POSIX. Maintenant, pour ce que ça vaut...
Je ne connais pas de systeme n'ayant pas de shell ne supportant pas les tableaux (ou l'inverse ;-).
Le shell de Solaris ne supporte pas les tableaux Ne me fait pas dire ce que j' ia pas dit. Je dit "Il existe un shell sous solaris qui a des tableaux" en l'occurence /usr/xpg4/bin/sh ou /bin/ksh
(et n'est pas POSIX non plus). Bref, tu reclames des trucs POSIX pour un shell qui ne l'est pas. Sous Solaris, /bin/sh est similaire a /sbin/jsh (man de tout ca) Le but de /sbin/jsh est juste d'avoir un shell capable de booter la machine, et d'etre un shell static utilisable en single. Faut pas lui en demander trop non plus.
La solution est peut-être d'exécuter, si ça échoue, un ksh depuis le script en #!/bin/sh sur la suite du script, mais je ne sais pas comment faire.
#! /bin/sh ( a[0]=1 || exit 1 ) 2>/dev/null || exec /bin/ksh "$0" ${1+"$@"}
Meme dans ce cas il reste "set -- '1 2 3' '4 5 6'" et "$@" que seuls quelques shells tres decerebres
Ce n'est pas propre de changer le $0 dans ces conditions.
1) ca marche sous le /bin/sh de Solaris, 2) Ca ne change pas $0, ca change "$1" "$2" etc.... C'est BASH et son appel bash -c 'bla bla bla' "$@" qui change "$0". A pas pareil. Bon appetit. Christophe.
On 2006-01-25 13:42:11 +0100, Christophe Martin wrote:
#! /bin/sh
( a[0]=1 || exit 1 ) 2>/dev/null || exec /bin/ksh "$0" ${1+"$@"}
Ah, merci. J'avais essayé un truc du genre, mais ça ne marchait pas. J'avais peut-être dû oublier le "$0". Le "|| exit 1" est inutile, non?
Meme dans ce cas il reste "set -- '1 2 3' '4 5 6'" et "$@" que seuls quelques shells tres decerebres
Ce n'est pas propre de changer le $0 dans ces conditions.
1) ca marche sous le /bin/sh de Solaris, 2) Ca ne change pas $0, ca change "$1" "$2" etc.... C'est BASH et son appel bash -c 'bla bla bla' "$@" qui change "$0". A pas pareil.
Ah oui, ça se corrige facilement... -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Re, Vincent Lefevre a écrit :
On 2006-01-25 13:42:11 +0100, Christophe Martin wrote:
#! /bin/sh
( a[0]=1 || exit 1 ) 2>/dev/null || exec /bin/ksh "$0" ${1+"$@"}
Ah, merci. J'avais essayé un truc du genre, mais ça ne marchait pas. J'avais peut-être dû oublier le "$0". Le "|| exit 1" est inutile, non?
Probablement, mais sur le moment ca m'a semble une bonne idee et ca a marche comme ca, alors .... A+ Christophe
participants (3)
-
Christophe Martin
-
Florent Guiliani
-
Vincent Lefevre