IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

script Bash et accents


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 18
    Points : 6
    Points
    6
    Par défaut script Bash et accents
    Bonjour à tous,

    Premier post, bravo pour ce site et ce forum ultra complets

    J'écris car j'ai un problème dans un script assez basique que je veux faire tourner sur mon NAS. C'est un Synology DS-508 et le shell utilisé sur ce système est ASH.

    Je ne sais pas si ça a son importance mais toujours est-il que ça fait une semaine que je cherche comme un fou comment faire gérer les accents à mon script.

    J'ai essayé toutes les commandes et tous les paramètres que j'ai pu trouver sur le net mais rien à faire. Alors peut être que j'ai pas utilisé ces infos comme il le fallait mais je n'ai plus aucune piste donc je me retourne vers les magiciens des lignes de code pour vous soumettre ce problème en espérant que qqun saura me répondre!

    Voilà le mini bout de code qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #!/bin/ash
     
    # Variables
    _fichier=$(echo $0 | sed 's/ash/txt/')
    _delai=$1
    _date=""
    _date_fichier=""
    _ecart_date=""
    _element=""
     
    while true
     do	_date=$(date '+%Y%m%d%H%M%S')
    	_date_fichier=$(date -r $_fichier '+%Y%m%d%H%M%S')
    	_ecart_date=$(($_date - $_date_fichier))
    	if [ $_ecart_date -le $_delai ]
    		then	_element=$(cat $_fichier)
    			echo "element:"
    			echo $_element
    		else	echo "En attente de l'element a traiter."
    			echo 
    	fi
    	sleep $_delai
    	clear
    done
     
    exit
    C'est pas bien compliqué n'est-ce pas?

    Mais dès qu'un accent se présente j'ai ce genre d'affichage:

    /volume1/▒laborations/▒ v▒rifier/

    au lieu de:

    /volume1/élaborations/à vérifier/

    :/

    help

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 582
    Points : 19 455
    Points
    19 455
    Par défaut
    Bonjour,

    l'interprétation des accents dans les noms de fichiers ne dépend pas du shell, mais des paramètres régionaux, qui sont définis sur le système.
    Si je me souviens bien, même quand il sera réglé pour gérer convenablement les noms de fichiers contenant des accents, étant donné que ces derniers n'ont pas été créés par un système qui les gérait, l'affichage ne sera pas correct : il faudra les réécrire (mv mauv? buéno) (

    donc, les espaces, les retours à la ligne, et les accents dans les noms de fichiers, c'est mal.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse N_BaH.
    Donc si je comprend bien je vais être obligé de n'écrire AUCUN accent dans le fichier que je trifouille

    Ça me pose pas de problème en soi mais ça engendre un autre problème pour la suite de mon script car le contenu du fichier correspond à des noms de fichiers et de répertoires que je dois traiter (cp, move, etc).

    Donc si je vire les accents, comment je saurais où les remettre avant de passer au traitement???

    À moins de créer une pseudo table de correspondance du genre:

    elaborations = élaborations
    a verifier = à vérifier
    etc

    Mais c'est pas gérable... je peux potentiellement avoir n'importe quel nom de fichier et/ou de répertoire dans mon fichier

    Ne pourrais pas remplacer mes accents par un code interprété comme il faut par mon script? Je pense aux code ASCII par exemple...

    Merci encore de ton aide

    Par contre j'ai pas compris cette phrase:
    Citation Envoyé par N_BaH Voir le message
    [...]il faudra les réécrire (mv mauv? buéno)[...]

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 582
    Points : 19 455
    Points
    19 455
    Par défaut
    quelques astuces :_delai doit être en secondes, ainsi que les dates des fichiers : les calculs sur les dates se font en secondes.

    utilise iconv pour faire correspondre l'encodage du fichier avec les paramètres régionaux de ton système.

    --
    ça sent pas bon cette histoire, probablement parce que les fenêtres sont fermées.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci pour l'astuce du nom de fichier ;-)

    Par contre pour délai est bien donné en secondes, quel est le problème?

    OK pour iconv mais je me rappelle avoir déjà essayé. Vais creusé un peu +

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 582
    Points : 19 455
    Points
    19 455
    Par défaut
    je ne peux pas le dire autrement : les calculs sur des dates se font en secondes depuis Epoch.
    les minutes, les heures, les jours, les mois, les années ne sont pas en base décimale, tu risques donc d'avoir des résultats qui ne correspondent pas à ce que tu attends.
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    date=$(date -u +%s)
    dateFichier=$(date -u -r $_fichier +%s)
    ecartDate=$(( date - dateFichier)) #valeur en secondes

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    OK j'ai compris N_BaH, j'étais pas réveillé la 1ère fois ^^

    En effet mon calcul devra donc être modifié de sorte à donner un chiffre en secondes du genre: secondes + 60 x minutes + 3600 x heures, etc...

    Par contre pour iconv j'ai commencé à regarder mais finalement il n'est pas dans mon système :/

    C'est possible de l'ajouter?

Discussions similaires

  1. supprimer des accents (script bash)
    Par gotcha5832 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/11/2010, 12h19
  2. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38
  3. Script bash : Pb avec sed
    Par fred64 dans le forum Linux
    Réponses: 3
    Dernier message: 19/08/2005, 11h24
  4. Scripts bash : requêtes sql
    Par milka dans le forum Linux
    Réponses: 3
    Dernier message: 17/08/2005, 10h59
  5. Problème script Bash
    Par Sphost dans le forum Linux
    Réponses: 10
    Dernier message: 26/07/2005, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo