Newsgroup: it.comp.os.linux.iniziare
Titolo: Eseguire script bleachbit solo quanto il precedente ha terminato il lavoro

Salve,
 
Ho necessità di usare alcuni script Bleachbit in automatico quindi 
piuttosto che intasare crontab dovrei crearmi uno script che poi 
inserirò in crontab o eseguirò a mano.
 
Di seguito trovate i comandi che normalmente eseguo a mano uno ad uno:
 
bash.history
system.cache
system.clipboard
system.free_disk_space
system.localizations
system.memory
system.rotated_logs
system.tmp
system.trash
apt.autoclean
apt.autoremove
apt.clean
apt.package_lists
 
Il problema è che alcuni script sono immediati altri invece necessitano 
anche di alcuni minuti perchè il loro lavoro termini quindi come posso 
dire allo script successivo aspetta che il precedente termini prima di 
partire?
 
Sarà un problema farli partire tutti assieme? Imho si...
 
Saluti.
GabrieleMax

https://gnulinuxarea.wordpress.com/2008/07/13/lanciare-una-sequenza-di-comandi-bash/
 

 
https://gnulinuxarea.wordpress.com/2008/07/13/lanciare-una-sequenza-di-comandi-bash/
 
 
Perfetto grazie! :)
 

 inserirò in crontab o eseguirò a mano.
 
Se gli script sono ben fatti e restituiscono correttamente
il loro exit status [*] allora puoi concatenarli con &&
 
script 1 &&
script 2 &&
...
script n
 
Un passo della catena sarà eseguito solo se i
precedenti sono andati a buon fine.
 
 
 
 
Esempio scemo:
 
 
 
#!/bin/bash
 
export PASSO=0
echo -n "Attendere prego "
{ echo -n "." ; PASSO=1 ; ls .     &> /dev/null; } &&
{ echo -n "." ; PASSO=2 ; ls /     &> /dev/null; } &&
{ echo -n "." ; PASSO=3 ; ls /bin  &> /dev/null; } &&
{ echo -n "." ; PASSO=4 ; ls /opt  &> /dev/null; } &&
{ echo -n "." ; PASSO=5 ; ls /ecc  &> /dev/null; } &&
{ echo -n "." ; PASSO=6 ; ls /var  &> /dev/null; }
ERR=$?
if [ "$ERR" == "0" ]; then
     echo " fatto."
else
     echo " errore: $PASSO ha restituito $ERR."
fi
 
 
 
Ho usato "ls" e i redirect servono solo ma tu puoi mettere
i tuoi script. Dul mio fs non c'è una directory /ecc r lo
script terminerà con:
 
Attendere prego ..... errore al passo 5 (2).
 
In caso contrario scriverà
 
Attendere prego ...... fatto.
 
 
 
 
Se ti serve un timeout:
 
#!/bin/bash
 
timeout 5s bash <<'FINETESTO'
export PASSO=0
echo -n "Attendere prego "
{ echo -n "." ; PASSO=1 ; ls .     &> /dev/null; } &&
{ echo -n "." ; PASSO=2 ; ls /     &> /dev/null; } &&
{ echo -n "." ; PASSO=3 ; sleep 6  &> /dev/null; } &&
{ echo -n "." ; PASSO=4 ; ls /opt  &> /dev/null; } &&
{ echo -n "." ; PASSO=5 ; ls /ecc  &> /dev/null; } &&
{ echo -n "." ; PASSO=6 ; ls /var  &> /dev/null; }
ERR=$?
if [ "$ERR" == "0" ]; then
     echo " fatto."
else
     echo " errore: $PASSO ha restituito $ERR."
fi
FINETESTO
ERR=$?
if [ "$ERR" != "0" ] ; then
     echo " timeout ($ERR)."
fi
 
 
con "sleep 6" all'ottava riga lo script eccede il timeout e termina.
con "sleep 1" segnala l'errore visto in precedenza.
 
 
 
 
 
 
[*] Devono cioè terminare con:
 
     exit 0
 
(o anche nulla) se tutto è andato bene oppure con:
 
     exit 1
 
o qualunque valore diverso da zero se qualcosa è
andato storto.
 
 
 
-- 
Lime and limpid green, a second scene
A fight between the blue you once knew
Floating down, the sound resounds
Around the icy waters underground
 
http://fuffologia.wordpress.com/
 

 i tuoi script
 
"servono solo a non intasare la console di scritte"


 "servono solo a non intasare la console di scritte"
 
Ok, grazie! :)
 
Diciamo che i miei script sono più banali però hai reso bene l'idea di 
cosa potrei fare se dovessi fare qualcosa di più evoluto!
 
Saluti.
GabrieleMax
 

 GabrieleMax
 
 
-- 
 
piergiorgio

 pg
 
Saluti!
GabrieleMax
 

 termina in maniera positiva.
 
Lo shell script altro non e` che una sequenza
di comandi che la shell interpreta (quasi sempre)
come se fossero dati da linea di comando.
 
Se tu, da linea di comando shell, dai i seguenti
comandi:
 
ls
echo "hello word"
sleep 10
ps ax
 
Cosa succede?
Che vengono eseguiti uno dopo l'altro.
Cioe` "echo" avviene _dopo_ "ls", "sleep"
_dopo_ "echo" e "ps" _dopo_ "sleep".
 
Se li metti in uno script shell tutti assieme,
cosa succede?
Che vengono eseguiti uno dopo l'altro, come
fossero stati dati da linea di comando.
 
Tra l'altro, se proprio non ti fidi, si puo`
sempre replicare con:
 
cat lista_comandi.txt | bash
 
E` la stessa cosa (attenzione alle espansioni
di shell).
 
bye,
 
-- 
 
piergiorgio


 
Non so neanche cosa sia.
 
Se il tuo problema è eseguire uno script della catena SOLO SE i 
precedenti sono andati a buon fine allora usi && (che è un operatore 
logico e non un separatore), ma gli script DEVONO prevedere di ritornare 
lo status adeguato quando escono, altrimenti non funziona.
 
Se ti interessa solo che siano eseguiti in sequenza allora usi il punto 
e virgola oppure li esegui tramite un altro script mettendolo 
semplicemente in righe successive.
 
#!/bin/sh
/path/dello/script1
/path/dello/script2
...
/path/dello/scriptN
 
 
Il "&" a fine comando serve per eseguire quel comando in background.
Non credo che sia quello che ti serve, in questo caso.
 
Metterli in crontab no?


 bye,
 
Saluti!
GabrieleMax
 

 Metterli in crontab no?
 
Mi verrebbe un crontab con 15 righe, per carità tutto fattibile però se 
tutti questi 15 script fanno parte di un unico software faccio prima ad 
inserirli in un unico script e a schedulare questo singolo con una sola 
riga di crontab! :)
 
Saluti.
GabrieleMax

 scrivere l'altro!
 
In pratica funziona cosi:
La (il) shell legge (per esempio) una riga
di comando alla volta e la esegue.
Per la shell, leggere da terminale o da file
e` la stessa cosa (il terminale e` un file,
uno e` /dev/tty).
 
Cioe`:
 
bash script.sh
bash < script.sh
cat script.sh | bash
bash <scrivo lo script a mano>
 
Sono (non proprio esattamente) la stessa cosa.
 
La prima forma e` leggermente diversa, in
quanto "bash" sa che deve eseguire un file
e quindi puo` prendere decisioni leggermente
diverse riguardo certi dettagli (alcune delle
variabili interne possono avere valori diversi
rispetto agli altri casi).
 
Questo e` importante, perche` evita esattamente
il problema che ti sei posto inizialmente, cioe`
di avere un comportamento diverso tra "bash" in
maniera interattiva ed in maniera non-interattiva.
 
Saluti e proficuo "bashing" :-)
 
bye,
 
-- 
 
piergiorgio

 riga di crontab! :)
 
Era quello che intendevo.
 
 
-- 
Make a backup copy of your soul!
http://fuffologia.blogspot.com/