Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/10/2012, à 00:04

carafife

[Résolu] Read sans variable...

Bonjour à tous,
Je continue à me documenter pour apprendre à faire des scripts bash. J'ai lu ce cours http://abs.traduc.org/abs-5.0-fr/ch14.html dans lequel on parle de la commande read sans variable à la suite. J'ai cru comprendre que si aucune variable n'était inscrit à la suite d'une commande read, la saisie clavier allait se loger dans la variable $reply. D'ailleurs dans ce cours, il est proposé l'exemple suivant:

echo -n "Saisissez une nouvelle valeur : "
read           #  Aucune variable n'est donnée à 'read', donc...
               #+ La saisie par 'read' est affectée à la variable par défaut, $REPLY.
var="$REPLY"
echo "\"var\" = "$var""

Lorsque je le lance j'obtiens :" Saisissez une nouvelle valeur : zot: 3: read: arg count
"var" =

Je ne comprends pas pourquoi la commande read chez moi ne marche pas sans variable... hmm De plus, les arguments de type "-n ou -s me renvoie aussi des codes d'erreurs ainsi:
Code:
#!/bin/bash
read -s -n1 -p "Appuyez sur une touche " touche
echo; echo "La touche était "\"$touche\""."

me renvoi:
2: read: Illegal option -s

Est-il possible que mon "bash" soit mal configuré?  Désolé pour mes questions de débutant mais là je dois dire que je pioche sad
Merci d'avance pour le coup de main ;-)

Dernière modification par carafife (Le 02/10/2012, à 17:57)


Ubuntu 16.04.2 LTS | 4.8.0-52-generic
Portable: ASUS Intel core I7 8 Gb de Ram
Son: Card Intel Device 9d71 driver: snd_hda_intel avec SonicMaster (non reconnu) | Graphic: Nvidia GEForce 940Mx
Mes tutos  logiciels photo: https://www.youtube.com/channel/UCXqw9E … Tbl5qH5jDA | Flickr: https://www.flickr.com/photos/carafife/

Hors ligne

#2 Le 02/10/2012, à 00:21

xavier4811

Re : [Résolu] Read sans variable...

Oui y a un défaut quelque part:

$ ./test1.sh 
Saisissez une nouvelle valeur : truc
"var" = truc
$ cat test1.sh 
#!/bin/bash
echo -n "Saisissez une nouvelle valeur : "
read           #  Aucune variable n'est donnée à 'read', donc...
               #+ La saisie par 'read' est affectée à la variable par défaut, $REPLY.
var="$REPLY"
echo "\"var\" = "$var"" 
$ ./test2.sh 
Appuyez sur une touche 
La touche était "y".
$ cat test2.sh 
#!/bin/bash
read -s -n1 -p "Appuyez sur une touche " touche
echo; echo "La touche était "\"$touche\""."

Hors ligne

#3 Le 02/10/2012, à 00:28

carafife

Re : [Résolu] Read sans variable...

Si je crois avoir bien compris, tout semble fonctionner chez toi... J’écris mes scripts avec gedit. Cela pourrait-il venir de là? Existe t-il une sorte de "reset" du shell à l'origine de l'install? J'ai peut-être fait une bêtise...


Ubuntu 16.04.2 LTS | 4.8.0-52-generic
Portable: ASUS Intel core I7 8 Gb de Ram
Son: Card Intel Device 9d71 driver: snd_hda_intel avec SonicMaster (non reconnu) | Graphic: Nvidia GEForce 940Mx
Mes tutos  logiciels photo: https://www.youtube.com/channel/UCXqw9E … Tbl5qH5jDA | Flickr: https://www.flickr.com/photos/carafife/

Hors ligne

#4 Le 02/10/2012, à 00:40

xavier4811

Re : [Résolu] Read sans variable...

Gedit ? j'ai pas trop confiance, j'ai déjà eu des m#?%!s avec.Il avait tendance a mettre des caractères de fin de lignes dos.
Depuis je n'utilise plus que vi et scite.
Essaie

dos2unix mon_script.sh

avant de lancer le script.
Si il n'est pas installé

sudo apt-get install dos2unix

Hors ligne

#5 Le 02/10/2012, à 00:44

carafife

Re : [Résolu] Read sans variable...

Ok je testerais demain soir car boulot oblige, il me faut me resoudre à me coucher. Si tu as un moment demain pour suivre ce fil ce serait cool de ta part ;-)
Merci encore pour ton passage


Ubuntu 16.04.2 LTS | 4.8.0-52-generic
Portable: ASUS Intel core I7 8 Gb de Ram
Son: Card Intel Device 9d71 driver: snd_hda_intel avec SonicMaster (non reconnu) | Graphic: Nvidia GEForce 940Mx
Mes tutos  logiciels photo: https://www.youtube.com/channel/UCXqw9E … Tbl5qH5jDA | Flickr: https://www.flickr.com/photos/carafife/

Hors ligne

#6 Le 02/10/2012, à 00:50

Postmortem

Re : [Résolu] Read sans variable...

Salut,
Comment lances-tu ton script ?
Tu ne ferais pas ça par hasard :

sh ./mon_script

Ou

sh /chemin/mon_script

?
Si c'est le cas, essaie plutôt de le lancer ainsi :

chmod 755 /chemin/mon_script # pour donner les droits d'exécution.
/chemin/mon_script

La 1ère ligne de ton script devant etre :

#!/bin/bash

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 02/10/2012, à 08:23

carafife

Re : [Résolu] Read sans variable...

Bonjour Postmortem,
Pour le lancement de mes scripts, je n'ai aucun probleme. Les droits sont ouverts et je me place dans le repertoire puis lance un sh nom_fichier. Tous s'ouvrent et s'executent sans soucis particulier. J'ai cependant des incohérences avec certaines fonctions qui ne marchent pas chez moi (voir plus haut). Je me dit que peut-etre, j'ai du faire une bêtise quelque part. Je viens de repenser ce matin à une manip qui serait peut-etre à l'origine du problème. J'ai lancé un maxsize xx car je cherchais à masquer l'entrée d'un mot de passe dans un script. Peut-etre que le problème viendrais de là!? D'ailleurs, au passage, comment revenir à une valeur maxsize par défaut? Je cherche dans le man mais là encore celui ci ne me donne pas toujours de retour sur les commandes pour lesquelles je l'interroge. Cela depuis que j'ai installé le man en francais hmm


Ubuntu 16.04.2 LTS | 4.8.0-52-generic
Portable: ASUS Intel core I7 8 Gb de Ram
Son: Card Intel Device 9d71 driver: snd_hda_intel avec SonicMaster (non reconnu) | Graphic: Nvidia GEForce 940Mx
Mes tutos  logiciels photo: https://www.youtube.com/channel/UCXqw9E … Tbl5qH5jDA | Flickr: https://www.flickr.com/photos/carafife/

Hors ligne

#8 Le 02/10/2012, à 09:13

Postmortem

Re : [Résolu] Read sans variable...

Salut,

carafife a écrit :

Bonjour Postmortem,
Pour le lancement de mes scripts, je n'ai aucun probleme. Les droits sont ouverts et je me place dans le repertoire puis lance un sh nom_fichier. Tous s'ouvrent et s'executent sans soucis particulier. J'ai cependant des incohérences avec certaines fonctions qui ne marchent pas chez moi (voir plus haut). Je me dit que peut-etre, j'ai du faire une bêtise quelque part.

Tu fais en effet une bêtise et cette bêtise, c'est la façon dont tu lances ton script !
Les options que tu utilises avec read sont spécifiques au read de bash.
Si tu lances ton script avec sh nom_fichier, ton script est exécuté avec sh et non bash (meme si tu as précisé #!/bin/bash). Et donc, le read utilisé est celui de sh ou un read externe. Et les options existantes pour celui de bash n'existent pas forcément pour les autres.
Il faut donc lancer ton script ainsi (après lui avoir donné les droits d'exécution) :

./mon_fichier

Ainsi, il sera bien exécuté avec bash (ou avec l'en-tete que tu as précisé).

Edit : je viens d'essayer et j'ai la même erreur que toi en lançant avec sh mon_fichier alors qu'avec ./mon_fichier, c'est OK :

$ ./test
Appuyez sur une touche 
La touche était "x".

$ sh test
test: 2: read: Illegal option -s

La touche était "".

Dernière modification par Postmortem (Le 02/10/2012, à 12:56)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#9 Le 02/10/2012, à 09:50

carafife

Re : [Résolu] Read sans variable...

Ok! big_smile
Maintenant je comprends mieux tongue Je me suis fait piégé betement car cela fonctionnait avoir d'autres scripts, du coup je ne m'étais pas méfié.... hmm pendant que j'y suis, je cherche une commande ou option à une commande qui permette de limiter le nombre de caracteres entrés après read et les remplacer par des asterisques par exemple... J'espère avoir été clair tongue


Ubuntu 16.04.2 LTS | 4.8.0-52-generic
Portable: ASUS Intel core I7 8 Gb de Ram
Son: Card Intel Device 9d71 driver: snd_hda_intel avec SonicMaster (non reconnu) | Graphic: Nvidia GEForce 940Mx
Mes tutos  logiciels photo: https://www.youtube.com/channel/UCXqw9E … Tbl5qH5jDA | Flickr: https://www.flickr.com/photos/carafife/

Hors ligne

#10 Le 02/10/2012, à 10:16

pingouinux

Re : [Résolu] Read sans variable...

Bonjour,

carafife #9 a écrit :

pendant que j'y suis, je cherche une commande ou option à une commande qui permette de limiter le nombre de caracteres entrés après read et les remplacer par des asterisques par exemple...

Si j'ai bien compris, tu veux que les caractères entrés au-delà de la limite fixée soient remplacés par des * .
Voici une suggestion, à adapter en fonction de tes besoins.

max=5; n=0; rep="";
while read -s -n1;
do
   [[ ! "$REPLY" ]] && { echo "$rep"; break;};
   ((++n>$max)) && rep+='*' || rep+="$REPLY";
done

Hors ligne

#11 Le 02/10/2012, à 16:05

carafife

Re : [Résolu] Read sans variable...

Merci pour ton passage pingouinuxmais je souhaitais que tous les caracteres entrés soient remplacés par un "*" et de pouvoir limiter le nombre de caracteres EX: "Entrez un mot de passe de 5 caracteres maximum"....


Ubuntu 16.04.2 LTS | 4.8.0-52-generic
Portable: ASUS Intel core I7 8 Gb de Ram
Son: Card Intel Device 9d71 driver: snd_hda_intel avec SonicMaster (non reconnu) | Graphic: Nvidia GEForce 940Mx
Mes tutos  logiciels photo: https://www.youtube.com/channel/UCXqw9E … Tbl5qH5jDA | Flickr: https://www.flickr.com/photos/carafife/

Hors ligne

#12 Le 02/10/2012, à 16:55

pingouinux

Re : [Résolu] Read sans variable...

carafife #11 a écrit :

je souhaitais que tous les caracteres entrés soient remplacés par un "*" et de pouvoir limiter le nombre de caracteres

max=5; n=0
echo -n "Entrez un mot de passe de $max caractères maximum : "
mdp=$(
   while read -s -n1;
   do
      { [[ ! $REPLY ]] || ((++n>max)); } && break || \
      { echo -n '*' 1>&2; echo -n "$REPLY"; };\
   done;
   echo 1>&2
)

Hors ligne

#13 Le 02/10/2012, à 17:57

carafife

Re : [Résolu] Read sans variable...

Merci pingouinux! Ton script marche parfaitement cool Je vais maintenant me pencher dessus et essayer de comprendre comment il fonctionne et de quoi il est composé.
Merci à vous!


Ubuntu 16.04.2 LTS | 4.8.0-52-generic
Portable: ASUS Intel core I7 8 Gb de Ram
Son: Card Intel Device 9d71 driver: snd_hda_intel avec SonicMaster (non reconnu) | Graphic: Nvidia GEForce 940Mx
Mes tutos  logiciels photo: https://www.youtube.com/channel/UCXqw9E … Tbl5qH5jDA | Flickr: https://www.flickr.com/photos/carafife/

Hors ligne