Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
MessagePosté: 11 Fév 2012 16:23 
Hors ligne

Inscription: 06 Fév 2012 17:46
Messages: 4
Bonjour,

Aujourd'hui c'est décider je me simplifie la vie, je fait des scripts shell qui vont travailler pour ...

Pour la petite histoire, tous les matins en arrivant au boulot il fait que je fasse l'audit chiffre de la veille. Ca prend vite 2h, c'est répétitive et sans intérêt personnel... Etant de permanence au bureau aujourd'hui je me suis dit que ça serait bien d'automatiser tout ça.

Mon script tourne pas trop mal, suaf que au moment ou je veut mettre de la couleur pour que ce soit plus agreable au matin ba voila...

Code:
./menu_audit.sh: line 21: read: « \033[1m » : identifiant non valable


J'ai le droit a ce jolie message d'erreur.

Voici mon code:
Code:
read -p "Jour unique?(y/n) $BOLD" TICKET_GENRE


BOLD est definie comme ceci
Code:
 BOLD="\033[1m"
plutôt dans le script

Ça fait 2h que je travail dessus avec Google, mais la je commence a perdre espoir..

Merci de votre aide


Haut
 Profil  
 
MessagePosté: 11 Fév 2012 17:56 
Hors ligne
Très bavard(e)!

Inscription: 30 Aoû 2008 17:33
Messages: 412
Bonjour,

Essaye de modifier la ligne ainsi :

Code:
read -p 'Jour unique?(y/n) \033[1m' TICKET_GENRE


Pour voir si c'est à cause de la variable BOLD que ça ne marche pas. Remarque que j'ai mis des guillemets simples (') au lieu des guillemets doubles (").


Haut
 Profil  
 
MessagePosté: 11 Fév 2012 18:05 
Hors ligne

Inscription: 06 Fév 2012 17:46
Messages: 4
Quand je remplace par le morceau de code que tu ma donner ca donne ca:

Code:
Jour unique?(y/n) \033[1m


J'ai essayez en re-remplacent les ' ' par " " => Idem


Haut
 Profil  
 
MessagePosté: 11 Fév 2012 18:52 
Hors ligne
Très bavard(e)!

Inscription: 30 Aoû 2008 17:33
Messages: 412
Moi je ferais comme ceci :

Code:
echo -en "Jour unique?(y/n) \033[0m" ; read TICKET_GENRE


Haut
 Profil  
 
MessagePosté: 12 Fév 2012 08:26 
Hors ligne

Inscription: 06 Fév 2012 17:46
Messages: 4
C'est ce que je vais finir par faire, mais est ce que tu a une idée de pourquoi il n'interprète pas le code couleur?


Haut
 Profil  
 
MessagePosté: 12 Fév 2012 11:34 
Hors ligne
Très bavard(e)!

Inscription: 30 Aoû 2008 17:33
Messages: 412
Dans le man de bash, ils expliquent le fonctionnement des deux commandes internes echo et read :

Code:
echo [-neE] [arguments ...]
       Affiche les arguments, séparés par des espaces, suivis par un saut de ligne. La valeur renvoyée est toujours 0.  Si  -n  est indiqué,  le  saut  de  ligne  final  est  supprimé. Si l'option -e est indiquée, l'interprétation des caractères suivants d'échappement par une contre-oblique est activée. L'option -E désactive l'interprétation de  ces  caractères  d'échappement, même  sur les systèmes où ils sont interprétés par défaut. L'option d'interpréteur xpg_echo peut être utilisée dynamiquement pour déterminer si echo développe ou non par défaut ces caractères d'échappement. echo n'interprète pas -- comme  signifiant la fin des options. echo reconnaît les suites de caractères d'échappement suivantes :
       \a     alerte (alarme) ;
       \b     effacement arrière (« backspace ») ;
       \c     supprime tout affichage suivant ;
       \e     caractère d'échappement ;
       \f     saut de page (« form feed ») ;
       \n     saut de ligne (« new line ») ;
       \r     retour chariot (« carriage return ») ;
       \t     tabulation horizontale ;
       \v     tabulation verticale ;
       \\     contre-oblique ;
       \0nnn  le caractère 8 bits dont la valeur en octal est nnn (zéro à trois chiffres octaux) ;
       \xHH   le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux) ;


Code:
read [-ers] [-a tableau] [-d délimiteur] [-i texte] [-n nb_car] [-N nb_car] [-p invite] [-t délai] [-u fd] [nom ...]

       Une ligne est lue depuis l'entrée standard ou à partir du descripteur de fichier fd fourni en argument à l'option  -u, puis le  premier  mot  de  cette  ligne  est affecté au premier nom, le second mot au second nom, et ainsi de suite avec les mots restants et leurs séparateurs affectés au dernier nom. S'il y a moins de mots lus dans le flux d'entrée  que  de variables, des valeurs vides sont affectées à celles restantes. Les caractères contenus dans la variable IFS sont utilisés pour découper la ligne en mots. Le caractère contre-oblique (\) permet de supprimer toute signification  spéciale  pour  le  caractère suivant et autorise la continuation de lignes. Les options, si fournies, ont les significations suivantes :

       -a tableau
              Les  mots  sont affectés aux indices successifs d'une variable tableau de nom tableau, en commençant à 0. tableau est détruit avant que de nouvelles valeurs ne soient affectées. Les autres arguments nom sont ignorés.

       -d délimiteur
              Le premier caractère de délimiteur est utilisé pour terminer la ligne de saisie, plutôt qu'un saut de ligne.

       -e     Si l'entrée standard provient d'un terminal, la bibliothèque readline (voir READLINE plus haut) est utilisée pour obtenir la ligne. Readline  utilise  les configurations d'édition en cours (ou par défaut, si l'édition de ligne n'était pas préalablement active).

       -i texte
              Si readline est utilisée pour lire la ligne, texte est placé dans le tampon d'édition avant le début de l'édition.

       -n nb_car
              read s'arrête après avoir lu nb_car caractères plutôt que d'attendre une ligne complète en entrée, mais un délimiteur est respecté si moins de nb_car caractères ont été lus avant le délimiteur.

       -N nb_car
              read s'arrête après avoir lu exactement nb_car caractères plutôt que d'attendre une ligne complète en entrée, sauf si une fin de fichier (EOF) est rencontrée ou si read dépasse son délai de réponse. Les délimiteurs rencontrés en entrée ne sont pas pris en compte et n'entraînent pas la fin de read avant que nb_car caractères n'aient été lus.

       -p invite
              Afficher invite sur la sortie d'erreur standard, sans caractère final de saut de ligne, avant d'essayer de lire toute nouvelle saisie. L'invite est affichée seulement si l'entrée vient d'un terminal.

       -r     La contre-oblique n'agit pas comme un caractère d'échappement. La contre-oblique est considérée comme faisant partie de la ligne. En particulier une contre-oblique suivie d'un saut de ligne n'est pas considérée comme une continuation de ligne.

       -s     Mode silencieux. Si une entrée arrive à partir d'un terminal, les caractères ne sont pas affichés.

       -t délai
              Conduire read à expirer et renvoyer un échec si une ligne complète en entrée n'a pas été lue dans le délai en  secondes. délai est un nombre décimal avec éventuellement des chiffres après la virgule (NdT : point en l'occurrence).
              Cette option n'est effective que si read lit l'entrée à partir d'un terminal, d'un tube, ou depuis un  autre  fichier spécial ; elle n'a aucun effet lors de la lecture d'un fichier normal. Si délai est nul, read termine avec succès si une entrée est disponible pour le descripteur de fichier indiqué, en échec sinon. L'état final est supérieur à 128 si le délai est dépassé.

       -u fd  Lire l'entrée à partir du descripteur de fichier fd.

       Si aucun nom n'est fourni, la ligne lue est affectée entièrement à la variable REPLY.  Le code renvoyé est zéro, sauf si une fin de fichier (EOF) est rencontrée, si read dépasse son délai de réponse (auquel cas le code renvoyé est plus grand que 128) ou si un descripteur de fichier incorrect est fourni en argument de -u.


Donc, la commande echo interprête \033 comme le caractère de code ASCII 27 (en décimal). C'est grâce à l'option -e.

La commande read n'accepte pas ce genre d'échappement. Donc il faut que tu mettes le caractère de code ASCII 27 toi même dans la ligne de commande. Pour ça je te propose plusieurs possibilités :

Code:
escape="$(printf '\e')"
read -p "Jour unique?(y/n) $escape[1m" TICKET_GENRE

Code:
escape="$(printf '\33')"
read -p "Jour unique?(y/n) $escape[1m" TICKET_GENRE

Code:
read -p "Jour unique?(y/n) $(printf '\e')[1m" TICKET_GENRE

Code:
read -p "Jour unique?(y/n) $(printf '\33')[1m" TICKET_GENRE


--------------------------

Code:
esc="$(echo -e '\e')"
read -p "Jour unique?(y/n) $esc[1m" TICKET_GENRE

Code:
esc="$(echo -e '\033')"
read -p "Jour unique?(y/n) $esc[1m" TICKET_GENRE

Code:
read -p "Jour unique?(y/n) $(echo -e '\e')[1m" TICKET_GENRE

Code:
read -p "Jour unique?(y/n) $(echo -e '\033')[1m" TICKET_GENRE


Haut
 Profil  
 
MessagePosté: 25 Fév 2012 10:57 
Hors ligne

Inscription: 06 Fév 2012 17:46
Messages: 4
Bonjour,

Désoler de ne pas avoir répondu plutôt, mais le 11/02 en partant du boulot j'ai percuté une remorque sur la voix rapide... Voiture épave et toute les galère qui vont avec... Bref me revoilà :)

Merci pour les infos, je vais essayez de bidouiller avec tout ça ;)


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.112s | 12 Queries | GZIP : Off ]