[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problemes amb automysqlbackup combinat amb un "locale" en català



Doncs jo ho entenc com un bug del propi locale. Voleu dir que som l'única llengua que es troba en aquesta situació? 

Com a primer plantejament caldria considerar la correcció del locale per tal que un date +%B retorni el mes sense preposició. 

En 2n terme, com diu l'Eloi, té tota la pinta que l'script es podria millorar. 

La opció menys intrusiva pero encara prou generalista, donat que veig que l'script no fa servei noms absoluts del programa date, crec que seria:
- crear un wrapper local per a la comanda date que:
  - si el pare és aquest script de backup en qüestió li assignes un locale que sàpigues que funcioni.
  - Si no, res
- seguidament, s'invoca el programa date habitual

Amb una bona configuració del PATH, entenc que hauria de funcionar. 


El ds., 19 des. 2020, 20.57, Eloi <entfe001@gmail.com> va escriure:
Comento entre solucions i retallo part del missatge

El 19/12/20 a les 19:48, orestes@riseup.net ha escrit:
> Benvolguda llista, a veure si em podeu ajudar en una cosa:
>
> [...]
>
> Fent una mica de recerca he pogut deduir l'origen del problema i fins i
> tot sabria solucionar-lo, però voldria saber si hi ha alguna manera
> millor de la que jo penso. M'explico:
>
> "automysqlbackup" és un script situat a /usr/sbin. Les línies rellevants
> d'aquest script són les següents:
>
> ----------------------------
> DATE=`date +%Y-%m-%d_%Hh%Mm`                            # Datestamp e.g
> 2002-09-21
> DOW=`date +%A`                                                  # Day of
> the week e.g. Monday
> DNOW=`date +%u`                                         # Day number of
> the week 1 to 7 where 1 represents Monday
> DOM=`date +%d`                                                  # Date
> of the Month e.g. 27
> M=`date +%B`                                                    # Month
> e.g January
> W=`date +%V`                                                    # Week
> Number e.g 37
> ----------------------------
>              ...
> ----------------------------
>          # Monthly Full Backup of all Databases
>          (...)
>          dbdump "$MDB" "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
> ----------------------------
>
> O sigui que usa "dbdump" (que és una funció definida en un altre lloc de
> l'script i acaba usant "mysqldump") amb un nom de fitxer que expandeix
> la variable "$M", la qual és el resultat de "date +%B" que, en un
> sistema amb locale en català donarà "de desembre" si l'executeu avui,
> per exemple.

Crec que part del problema pot venir, precisament, d'aquesta la funció
dbdump (no uso mysql i no ho puc verificar). Tenir espais en blanc a
noms de fitxer, tot i que en general és bona pràctica evitar-los, no
hauria de ser un problema sempre i quan s'escapin correctament les
variables. En aquest sentit, l'ús de les cometes dobles és correcte en
aquest punt, i el nom del fitxer (així com el del directori) haurien de
ser tolerants.

Em fa la fila que, en algun lloc de la funció shell dbdump, hi haurà un
$2 en lloc d'un "$2" a l'hora d'escriure el fitxer de sortida. A menys
que se sàpiga del cert que no hi haurà espais en blanc o que precisament
interessi que els espais impliquin una separació d'elements, tota
referència a una variable de shell jo la posaria entre cometes dobles
(compte, que les simples signifiquen quelcom ben diferent!)

> Tal i com ho veig jo, podria fer el següent:
>
> 1) Canviar el "locale" del sistema, el problema és que és un servidor
> que córre un Moodle i si canvio el locale del sistema hi ha algunes
> cosetes del moodle que surten en anglès.

No necessites canviar el locale del sistema, només el del propi shell,
ja sigui cridant-lo passant com a prefix:

LC_ALL=C automysqlbackup

En general, per a scripts de backups que usen dates no és mala idea,
especialment si s'usen noms literals de mes o del dia de la setmana,
cosa que personalment evito perquè pots acabar amb una col·lecció de
còpies amb noms inconsistents entre elles si s'han generat amb locales
diferents

> 2) Canviar l'script del automysqlbackup per tal que no posi el nom del
> mes, el posi sense espai o alguna cosa semblant. El problema que hi veig
> és que ho hauria de refer en cada actualització del automysqlbackup. No
> em sembla una bona idea.
Jo obriria un bug, precisament per evitar el que deia en en paràgraf
anterior
> 3) Potser podria fer un terme mig i crear una configuració "local" del
> automysqlbackup, que no es veuria sobreescrita en actualitzar el paquet,
> i que forcés un "locale" anglès en executar-se. Potser és la millor
> manera però, ni que sigui per curiositat, hi ha alguna manera
> d'arreglar-ho preservant el nom del mes en català? Com ho faríeu
> vosaltres?

Pots crear un shell on preparis configuracions, com la del locale, i fer
servir aquest script. Fins i tot podries arribar a donar-li el mateix
nom i posar-lo en una ubicació amb major prioritat al path (cosa que
personalment no m'agrada), sempre que l'script es cridi sense ruta absoluta.

En el teu cas podria ser una cosa tan simple com això:

#!/bin/sh
export LC_ALL=C
automysqlbackup "$@"

Pel que fa a poder mantenir els noms dels mesos en català, una altra
alternativa seria tocar el teu locale (no en tinc experiència ni sabria
dir fins a quin punt és realment viable i/o prudent) i modificar els
mesos per tal que s'escriguin sense l'article, és a dir, "maig" en lloc
de "de maig".

> Gràcies!
>
> Orestes.
>


Reply to: