Newsgroup: it.comp.os.linux.iniziare
Titolo: Strano comportamento di script bash

Salve ho tutti,
ho uno scriptino in bash che mi fa il backup dei file registrati il 
giorno precedente dalla ipcam; eccolo:
[script]
#!/bin/bash
DIR1=/mnt/IPCAM/snapshot/
FILE1=/mnt/IPCAM/snapshot/`date --date '1 day ago' +%d.%m.%Y`.tar.gz
DIR2=/mnt/IPCAM/snapshot/archiviati/`date +%B.%Y`
cd $DIR1
    tar -czf $FILE1 `find * -type f -daystart -name '*jpg' -mtime 1 
-print` `find * -type f -daystart -name '*mp4' -mtime 1 -print`
if [ -d "$DIR2" ]       # Controlla se esiste la directory DIR2
then
    mv $FILE1 $DIR2      # Se la directory DIR2 esiste sposta il file lì
else
    mkdir $DIR2          # Se la directory non esiste la crea
    mv $FILE1 $DIR2      # Sposta il file creato nella nuova directory
fi
[/script]
Succede che se lancio il file dal terminale la directory $DIR2 il file 
creato mi viene regolarmente spostato nella directory "ottobre.2008", 
mentre se faccio eseguire lo script da cron mi viene creata una 
directory "October.2008" ed il file mi viene spostato in quest'ultima.
Qualcuno sa spiegarmi perchè ?
Ringrazio.

 directory "October.2008" ed il file mi viene spostato in quest'ultima.
Dipende dal locale. Esegui "locale" dal terminale, e guarda che valore ha
LC_ALL. Quindi metti all'inizio dello script
LC_ALL=<il valore che hai visto prima>
Oppure puoi limitare l'uso al solo comando date:
LC_ALL=qualcosa date --date '....' ....

 LC_ALL. Quindi metti all'inizio dello script
Intanto di nuovo grazie per la celeritŕ della risposta.
Poi, ehm, questo č quello che ricevo dal terminale digitando locale:
[misha@newhost ~]$ locale
LANG=it_IT@euro
LC_CTYPE="it_IT@euro"
LC_NUMERIC="it_IT@euro"
LC_TIME="it_IT@euro"
LC_COLLATE="it_IT@euro"
LC_MONETARY="it_IT@euro"
LC_MESSAGES="it_IT@euro"
LC_PAPER="it_IT@euro"
LC_NAME="it_IT@euro"
LC_ADDRESS="it_IT@euro"
LC_TELEPHONE="it_IT@euro"
LC_MEASUREMENT="it_IT@euro"
LC_IDENTIFICATION="it_IT@euro"
LC_ALL=
Se ci metto "it_IT@euro" pensi che vada ?

 Ringrazio.
perchč le variabili di ambiente del tuo utente sono diverse da quelle
quelle di cron, dovresti risolvere con un export LANG=it_IT al'inizio
dello script.
Non sarebe piu' comodo usare solo i numeri che sono uguali in tutte le
lingue? 
una cosa cosě insomma: date +%m-%Y
ciao 
-- 
Web marketing & community management:
http://www.insistema.com/

 Se ci metto "it_IT@euro" pensi che vada ?
Controllato, cosě non va.
Ho adottato la soluzione export etc. fornita da Redwiz che funziona.
Ciao e grazie ancora.

 una cosa cosě insomma: date +%m-%Y
Sě, certamente piů comodo ma ero incuriosito da questo, per me, strano 
comportamento tra le due esecuzioni; personalmente credevo che avendo 
impostato il locale a it_IT@euro (che non capisco perň perchč non 
compaia alla voce LC_ALL - vedi mio precedente reply ad antani) tutto il 
sistema rispondesse a tale locale.
Grazie.

 Se ci metto "it_IT@euro" pensi che vada ?
Si', dovrebbe funzionare. Comunque lo vedi subito:
$ LC_ALL=C date +%B
October
$ LC_ALL=it_IT@euro date +%B
ottobre

 sistema rispondesse a tale locale.
ma meno male che non č cosě!
Ogni utente ha il suo environ , con i suoi PATH, la sua lingua, le sue
preferenze in genere, etc.
č questo il motivo per cui negli script cron sarebbe sempre meglio
mettere i path ai comandi completi
es:
/usr/bin/mkdir invece di mkdir 
/usr/bin/tar invece di tar eccetera
(ok, la /usr/bin ce l'hai di sicuro anche dentro cron, ma prendi questo
discorso piu' in generale)


 mv $FILE1 $DIR2
Io lo riscriverei così:
mkdir -p $DIR2
mv $FILE1 $DIR2
-- 
Fr3ddie
fr3...@fr3ddie.it
Home Page: 
http://www.fr3ddie.it
OpenPGP Public Key available on my website
Errare è umano, ma per fare veramente casino serve la password di r00t...