|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
bonjour à vous...
Je débute dans le monde du korn shell... et je cherche à faciliter le travail de certain utilisateurs... Dont moi ![]() comment dois-je procéder pour afficher dans une "liste de choix" le retour d'une commande ls ? Et idéalement récupérer le nom du fichier ou dossier qu'a sélectionner l'utilisateur ? Merci d'avance pour votre aide ! Bil |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
bil.bao@freesurf.ch writes:
> bonjour à vous... > > Je débute dans le monde du korn shell... et je cherche à faciliter le > travail de certain utilisateurs... > Dont moi ![]() > > comment dois-je procéder pour afficher dans une "liste de choix" le > retour d'une commande ls ? > Et idéalement récupérer le nom du fichier ou dossier qu'a sélectionné > l'utilisateur ? > > Merci d'avance pour votre aide ! Voir par exemple: http://groups.google.com/group/fr.co...3116ce7e26e12e C'est de la coquille bash, mais ça devrait pouvoir tourner sans trop de modifications en ksh. Si on considère la seconde implémentation, commencer simplement par: menu_items=( $(ls) ) -- __Pascal Bourguignon__ http://www.informatimago.com/ There is no worse tyranny than to force a man to pay for what he does not want merely because you think it would be good for him. -- Robert Heinlein |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
C'est exactement ce qu'il me fallait !
Merci beaucoup Pascal |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
C'est exactement ce qu'il me fallait !
Merci beaucoup Pascal |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
C'est exactement ce qu'il me fallait !
Merci beaucoup Pascal |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Pascal je m'excuse.. mais sans vouloir abuser...
Le script fonctionne parfaitement sous un shell bash Cependant, je n'arrive pas à le faire fonctionner en ksh. En faite c'est la partie de la boucle qui me pose des problèmes... L'affichage n'est pas très coérant et l'incrémentation des choix ne se fait pas. ça ne tient pas à grand chose mais je suis incapable de voir ou est l'erreur... menu_items=$(ls ../repository) menu_lines=4 menu_span=$(( ( $menu_lines - 1 + ${#menu_items[@]} ) / $menu_lines )) column_width=$(( 150 / $menu_span )) format="%2d %-$(( ${column_width} - 3 ))s" i=0 while [ "${i}" -lt "${menu_lines}" ] ; do j=$i while [ "${j}" -lt "${#menu_items[@]}" ] ; do printf " $format $j ${menu_items[$j]} " j="${j} + ${menu_lines}" done printf "\n" i=$(( $i+1 )) done Mille fois merci ! |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
bil.bao@freesurf.ch a écrit :
> ... > comment dois-je procéder pour afficher dans une "liste de choix" le > retour d'une commande ls ? > Et idéalement récupérer le nom du fichier ou dossier qu'a sélectionner > l'utilisateur ? - - - - - - - - - - - - #!/bin/ksh select choix in $(ls) do break done echo "choix=$choix" - - - - - - - - - - - - Les noms de fichiers ne doivent pas contenir d'espaces. |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
Jean-Louis Liagre :
> $(ls) Plutôt «*». |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
bil.bao@freesurf.ch writes:
> Pascal je m'excuse.. mais sans vouloir abuser... > > Le script fonctionne parfaitement sous un shell bash > > Cependant, je n'arrive pas à le faire fonctionner en ksh. > En faite c'est la partie de la boucle qui me pose des problèmes... > > L'affichage n'est pas très coérant et l'incrémentation des choix ne > se fait pas. ça ne tient pas à grand chose mais je suis incapable > de voir ou est l'erreur... Je suis désolé, mais je n'utilise pas ksh. En grande partie pour cette raison, que les choix ne s'incrémentent pas. Il semble que modifier une variable à l'intérieur d'une boucle while n'a pas d'impact hors de la boucle, au moins dans les cas où le corps de la boucle s'exécute dans un sous-processus. Pour cette raison, et d'autres, je trouve que programmer une telle fonction avec un shell est limite. (J'ai mieux à faire qu'apprendre les tonnes de détails arbitraires et idiosyncrasies spécifiques nécessaires pour pouvoir écrire correctement (sans dire portablement) des programmes en shell). Je conseille d'utiliser un vrai langage de programmation pour écrire ce genre de "script", par exemple, scsh, clisp, ruby, etc, n'importe quoi, mais pas un shell. > menu_items=$(ls ../repository) > menu_lines=4 > menu_span=$(( ( $menu_lines - 1 + ${#menu_items[@]} ) / $menu_lines )) > column_width=$(( 150 / $menu_span )) > format="%2d %-$(( ${column_width} - 3 ))s" > i=0 > while [ "${i}" -lt "${menu_lines}" ] ; do > j=$i > while [ "${j}" -lt "${#menu_items[@]}" ] ; do > printf " $format $j ${menu_items[$j]} " > j="${j} + ${menu_lines}" > done > > printf "\n" > i=$(( $i+1 )) > done > > Mille fois merci ! -- __Pascal Bourguignon__ http://www.informatimago.com/ This universe shipped by weight, not volume. Some expansion may have occurred during shipment. |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
Merci à tous pour votre aide !
Pascal, malheureusement je n'ai pas vraiment le choix du language. C'est un peu imposé par la société... et ce que tu me dis ne m'étonne qu'a moitié compte tenu des différentes décisions qui se prennent chez nous ![]() ça ne changerait pas mon problème de toute manière vu que je n'y connais rien ![]() Je te remercie de tes conseils qui me serviront probablement pour la suite... Jean-Luc et Louis... Merci pour le select ! C'est un peu moins sexy en ce qui concerne la mise en forme... mais c'est parfaitement fonctionnel en l'état et il faut le dire plus simple A+ Bil |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
Luc Habert a écrit :
> Jean-Louis Liagre : > >> $(ls) > > Plutôt « * ». C'est vrai, et le résultat est identique, mais ça esquive la question (retour de ls). |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
2007-01-30, 21:43(+01), Jean-Louis Liagre:
> Luc Habert a écrit : >> Jean-Louis Liagre : >> >>> $(ls) >> >> Plutôt « * ». > > C'est vrai, et le résultat est identique, mais ça esquive la question > (retour de ls). sigh... Non, le resultat n'est pas identique. $(ls) ne fait pas de sens si on n'a pas au prealable modifié IFS et fait un set -f. Et * devient "*" s'il n'y a pas de fichier dans le repertoire courant. -- Stéphane |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
Stephane Chazelas wrote:
> 2007-01-30, 21:43(+01), Jean-Louis Liagre: >> Luc Habert a écrit : >>> Jean-Louis Liagre : >>> >>>> $(ls) >>> Plutôt « * ». >> C'est vrai, et le résultat est identique, mais ça esquive la question >> (retour de ls). > > sigh... > > Non, le resultat n'est pas identique. Le plus souvent, si. > $(ls) ne fait pas de sens > si on n'a pas au prealable modifié IFS et fait un set -f. J'ai précisé que les fichiers ne devaient pas contenir d'espace. Les autres cas ne me semblent pas très réalistes (fichiers dont le nom contient "*", "?", "<Tab>" ou un retour chariot ...) > Et * > devient "*" s'il n'y a pas de fichier dans le repertoire > courant. C'est vrai, on peux aussi supposer qu'il y en a, d'après l'énoncé de la question posée. |
|
|
|
#14 |
|
Messages: n/a
Hébergeur: |
Jean-Louis Liagre <root@localhost> writes:
> J'ai précisé que les fichiers ne devaient pas contenir d'espace. > > Les autres cas ne me semblent pas très réalistes (fichiers dont le nom > contient "*", "?", "<Tab>" ou un retour chariot ...) Bien au contraire, avec les interfaces utilisateurs graphiques, le plus réaliste c'est uque le nom de fichier contienne des espace, des étoiles, des points d'interrogation et toute sorte de caractères bizarres. -- __Pascal Bourguignon__ http://www.informatimago.com/ PLEASE NOTE: Some quantum physics theories suggest that when the consumer is not directly observing this product, it may cease to exist or will exist only in a vague and undetermined state. |
|
|
|
#15 |
|
Messages: n/a
Hébergeur: |
2007-02-02, 03:51(+01), Pascal Bourguignon:
> Jean-Louis Liagre <root@localhost> writes: > >> J'ai précisé que les fichiers ne devaient pas contenir d'espace. >> >> Les autres cas ne me semblent pas très réalistes (fichiers dont le nom >> contient "*", "?", "<Tab>" ou un retour chariot ...) > > Bien au contraire, avec les interfaces utilisateurs graphiques, le > plus réaliste c'est uque le nom de fichier contienne des espace, des > étoiles, des points d'interrogation et toute sorte de caractères > bizarres. [...] Et pour moi, ce n'est pas une question de ce qui est probable ou pas, mais de syntaxe correcte ou pas. La syntaxe shell est a la con, il faut faire avec ou utiliser de meilleurs languages, il y en a plein des intereprétés de nos jours. -- Stéphane |
|
![]() |
| Outils de la discussion | |
|
|