Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/03/2011, 23h42   #1
Invité de passage
 
Inscription : mars 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 18
Points : 1
Points : 1
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 :
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
Jxxx7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 07h24   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
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.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/03/2011, 12h12   #3
Invité de passage
 
Inscription : mars 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 18
Points : 1
Points : 1
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)[...]
Jxxx7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 13h20   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
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.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/03/2011, 16h34   #5
Invité de passage
 
Inscription : mars 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 18
Points : 1
Points : 1
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 +
Jxxx7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 18h21   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
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 :
1
2
3
date=$(date -u +%s)
dateFichier=$(date -u -r $_fichier +%s)
ecartDate=$(( date - dateFichier)) #valeur en secondes
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/03/2011, 23h29   #7
Invité de passage
 
Inscription : mars 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 18
Points : 1
Points : 1
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?
Jxxx7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h07.


 
 
 
 
Partenaires

Hébergement Web