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 15/01/2007, à 18:27

luckytoyn

[résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Ceci est un rajout : allez directement voir au post 6 : c'est le même problème mais simplifié...


Bonjour tout le monde,

j'écris un petit script qui peut me renommer les fichiers d'un répertoire en supprimant
tous les accents bizarres ou les points-virgules etc.

J'arrive à quelque chose d'étrange avec la commande "tr".
Quand je tape les lignes de commandes unes par unes, le script fonctionne. Quand
je lance le script, la fonction "tr" ne marche pas. Donc je ne comprend pas bien...

L'erreur est certainement grossière, mais je ne la vois pas.

voici le script :

#!/bin/bash                                                                 
ls | grep -v nouveaux | grep -v liste > liste
sed 'y/\ /_/' liste > nouveaux2
sed 'y/:()\,;/_____/' nouveaux2 > nouveaux
for i in $(awk '{ print NR }' nouveaux) ; do echo "$(awk 'NR == '$i' { print $0 }' nouveaux)" | tr "é" "e" ; done




Voici ce qui se passe exactement quand je tape les mêmes commandes à la main :
(j'ai fait copier coller, je n'ai pas tout retapé -> l'erreur ne vient pas de là a priori)

arozel@lst-rozel:~/net$ rm *
arozel@lst-rozel:~/net$ touch é\ \(:\;\)                                    //je rentre deux fichiers avec des noms
arozel@lst-rozel:~/net$ touch ::dfjk\ djés                                //bizarres
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:;)                                                                                             //les voici
arozel@lst-rozel:~/net$ ls | grep -v nouveaux | grep -v liste > liste          //je les met dans "liste"
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:;)  liste                                                                         //liste existe bien
arozel@lst-rozel:~/net$ cat liste
::dfjk djés
é (:;)
arozel@lst-rozel:~/net$ sed 'y/\ /_/' liste > nouveaux2               //je supprime les espaces vides
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:;)  liste  nouveaux2                                                //nouvelle liste dans nouveaux2
arozel@lst-rozel:~/net$ cat nouveaux2                                    //il n'y a plus d'espace vide
::dfjk_djés
é_(:;)
arozel@lst-rozel:~/net$ sed 'y/:()\,;/_____/' nouveaux2 > nouveaux      //tous les caractères bizarres
arozel@lst-rozel:~/net$ ls                                                                    //sont remplacés par des "_"
::dfjk djés  é (:;)  liste  nouveaux  nouveaux2                                       //et la liste est stoskée dans nouveaux
arozel@lst-rozel:~/net$ cat nouveaux
__dfjk_djés
é_____
arozel@lst-rozel:~/net$ for i in $(awk '{ print NR }' nouveaux) ; do echo "$(awk 'NR == '$i' { print $0 }' nouveaux)" | tr "é" "e" ; done
__dfjk_djees                                                                 //les "é" sont remplacés par des "ee"
ee_____


-->> A la main, tout marche comme prévu


voici ce que donne le script lorsque je fais ceci :

arozel@lst-rozel:~/net$ rm *
arozel@lst-rozel:~/net$ ls
arozel@lst-rozel:~/net$ touch ::dfjk\ djés                    //le même mot que tout à l'heure
arozel@lst-rozel:~/net$ touch é\ \(:\;\)                        //idem
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:;)
arozel@lst-rozel:~/net$ ../rnm                        //le script s'appelle rnm et je l'ai placé dans ../
__dfjk_djés
é_____

conclusion, j'ai fait exactement la même chose et le script ne fait pas fonctionner : tr "é" "e"

Je ne vois pas le truc!

Merci si vous vous sentez le courage de rentrer dedans!

Dernière modification par luckytoyn (Le 17/01/2007, à 10:00)


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne

#2 Le 15/01/2007, à 18:31

luckytoyn

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Ok alors je vais désactiver les smileys et on y verra plus clair...


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne

#3 Le 15/01/2007, à 18:50

luckytoyn

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Je n'arrive pas à les désactiver... Ah les nouveaux!
Vous pouvez lire ce message en allant dans profil/Affichage et en désactivant l'option
"afficher les smileys sous forme d'icione"

Ou alors, dites moi comment faire...

désolé d'être un boulet ;-)


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne

#4 Le 15/01/2007, à 19:18

Sorciere

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Et en mettant le code entre les balises ad hoc ?

Comme ça

En revanche, pour le fond du problème... j'attends que quelqu'un donne la solution pour m'instruire...

Hors ligne

#5 Le 15/01/2007, à 22:06

luckytoyn

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Bon alors revoici le même post avec essai des balises : j'espère que
ca va marcher...

Bonjour tout le monde,

j'écris un petit script qui peut me renommer les fichiers d'un répertoire en supprimant
tous les accents bizarres ou les points-virgules etc.

J'arrive à quelque chose d'étrange avec la commande "tr".
Quand je tape les lignes de commandes unes par unes, le script fonctionne. Quand
je lance le script, la fonction "tr" ne marche pas. Donc je ne comprend pas bien...

L'erreur est certainement grossière, mais je ne la vois pas.

voici le script :

#!/bin/bash                                                                 
ls | grep -v nouveaux | grep -v liste > liste
sed 'y/\ /_/' liste > nouveaux2
sed 'y/sad)\,;/_____/' nouveaux2 > nouveaux
for i in $(awk '{ print NR }' nouveaux) ; do echo "$(awk 'NR == '$i' { print $0 }' nouveaux)" | tr "é" "e" ; done




Voici ce qui se passe exactement quand je tape les mêmes commandes à la main :
(j'ai fait copier coller, je n'ai pas tout retapé -> l'erreur ne vient pas de là a priori)

arozel@lst-rozel:~/net$ rm *
arozel@lst-rozel:~/net$ touch é\ \(:\;\)                                    //je rentre deux fichiers avec des noms
arozel@lst-rozel:~/net$ touch ::dfjk\ djés                                //bizarres
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:wink                                                                                             //les voici
arozel@lst-rozel:~/net$ ls | grep -v nouveaux | grep -v liste > liste          //je les met dans "liste"
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:wink  liste                                                                         //liste existe bien
arozel@lst-rozel:~/net$ cat liste
::dfjk djés
é (:wink
arozel@lst-rozel:~/net$ sed 'y/\ /_/' liste > nouveaux2               //je supprime les espaces vides
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:wink  liste  nouveaux2                                                //nouvelle liste dans nouveaux2
arozel@lst-rozel:~/net$ cat nouveaux2                                    //il n'y a plus d'espace vide
::dfjk_djés
é_(:wink
arozel@lst-rozel:~/net$ sed 'y/sad)\,;/_____/' nouveaux2 > nouveaux      //tous les caractères bizarres
arozel@lst-rozel:~/net$ ls                                                                    //sont remplacés par des "_"
::dfjk djés  é (:wink  liste  nouveaux  nouveaux2                                       //et la liste est stoskée dans nouveaux
arozel@lst-rozel:~/net$ cat nouveaux
__dfjk_djés
é_____
arozel@lst-rozel:~/net$ for i in $(awk '{ print NR }' nouveaux) ; do echo "$(awk 'NR == '$i' { print $0 }' nouveaux)" | tr "é" "e" ; done
__dfjk_djees                                                                 //les "é" sont remplacés par des "ee"
ee_____


-->> A la main, tout marche comme prévu


voici ce que donne le script lorsque je fais ceci :

arozel@lst-rozel:~/net$ rm *
arozel@lst-rozel:~/net$ ls
arozel@lst-rozel:~/net$ touch ::dfjk\ djés                    //le même mot que tout à l'heure
arozel@lst-rozel:~/net$ touch é\ \(:\;\)                        //idem
arozel@lst-rozel:~/net$ ls
::dfjk djés  é (:wink
arozel@lst-rozel:~/net$ ../rnm                        //le script s'appelle rnm et je l'ai placé dans ../
__dfjk_djés
é_____

conclusion, j'ai fait exactement la même chose et le script ne fait pas fonctionner : tr "é" "e"

Je ne vois pas le truc!

Merci si vous vous sentez le courage de rentrer dedans!

http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne

#6 Le 16/01/2007, à 10:37

luckytoyn

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Rebonjour,

voici le même problème simplifié (et je vous fais mes excuses pour la barbarie de
mes propos...) :

j'ai créé un fichier "nouveaux" tel que :

arozel@lst-rozel:~/net$ cat nouveaux
jhgék
jégék
jéégék


et un script (dans ../simpl) qui contient :

#!/bin/bash
for i in $(awk '{ print NR }' nouveaux) ; do echo "$(awk '{ print $1 }' nouveaux)" | tr "é" "e" ; done

si j'exécute le scipt, j'obtiens :

arozel@lst-rozel:~/net$ ../simpl
jhgék
jégék
jéégék
jhgék
jégék
jéégék
jhgék
jégék
jéégék


et si je fais copier coller du script dans un gnome-terminal :

arozel@lst-rozel:~/net$ for i in $(awk '{ print NR }' nouveaux) ; do echo "$(awk '{ print $1 }' nouveaux)" | tr "é" "e" ; done
jhgeek
jeegeek
jeeeegeek
jhgeek
jeegeek
jeeeegeek
jhgeek
jeegeek
jeeeegeek


...

Peut être une piste :
pour pouvoir taper des accents dans mon script, je dois ouvrir emacs avec :
arozel@lst-rozel:~/net$ LANG=FR_Fr emacs ../simpl

...

je ne vois toujours pas le truc

Dernière modification par luckytoyn (Le 16/01/2007, à 10:48)


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne

#7 Le 16/01/2007, à 10:44

luckytoyn

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

et oui, c'est peut être ça le truc... si je regarde le script point de vue terminal :

arozel@lst-rozel:~/net$ cat ../simpl
#!/bin/bash
for i in $(awk '{ print NR }' nouveaux) ; do echo "$(awk '{ print $1 }' nouveaux)" | tr "�" "e" ; done


il y a ce caractère "?"

mais si je fais

arozel@lst-rozel:~/net$ LANG=FR_Fr ../simpl
jhgék
jégék
jéégék
jhgék
jégék
jéégék
jhgék
jégék
jéégék


toujours pas d'accents...


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne

#8 Le 16/01/2007, à 11:16

luckytoyn

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Bien...

donc j'ai écrit le script sans emacs, à partir d'un gnome-terminal en faisant :

...
echo "commandes" >> ../script
...

et quand j'execute mon script, il marche!!

Le problème était donc que emacs me montrait des caractères (ici des "é") qu'il n'enregistrait pas! (il enregistrait des "�")
Plutôt sournois comme truc...
Maintenant reste à chercher comment mieux configurer emacs...
Je posterai comment il faut faire dès que j'aurai trouvé.

J'espère que ce bug servira à quelqu'un.


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne

#9 Le 16/01/2007, à 21:54

Freddy

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Est-ce que tu peux dire quel est le deuxième caractère en partant de la gauche de la modeline ?
A priori, il s'agit ou bien de 1 (comme latin-1) ou de u (comme UTF-8). Tu peux vérifier en posant la souris au-dessus de
Ubuntu utilise par défaut UTF-8, vérfie que c'est bien le cas en faisant un « locale », la première ligne devrait commencer par LANG=fr_FR.UFT-8.
Si Ubuntu et emacs ne sont pas d'accord sur l'encodage à utiliser, c'est là qu'est le problème.
Pour réencoder le fichier en UTF-8, utilise set-buffer-file-coding-system ou C-x RET f puis utf-8.
Regarde aussi dans ton .emacs si tu as des choses relatives à l'encodage. Le fait que tu doives utiliser LANG=fr_FR emacs pour invoquer emacs est un symptôme du problème.


There is no system but GNU, and Linux is one of its kernels.

Hors ligne

#10 Le 16/01/2007, à 22:59

Balkoth

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

Pour pouvoir utiliser utf8 dans emacs, voilà ce qu'il faut mettre dans le .emacs :

(set-language-environment 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-language-environment 'utf-8)
(prefer-coding-system 'utf-8)

Hors ligne

#11 Le 17/01/2007, à 10:00

luckytoyn

Re : [résolu] commandes en console -> ok, mêmes lignes ds 1 script -> non

ok merci les gars,

Freddy, quand je fais "locale", le système me renvoie bien :
LANG=fr_FR.UTF-8
donc ça vient plutot d'emacs.

Balkoth, ça marche quand je mets ce code dans le .emacs.


Problème résolu!
good job


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne