Ecco un post di quelli che non si vedevano da tanto su questo blog, che mi riportano indietro ai vecchi tempi, il cui ricordo ancora mi emoziona, mi appassiona ma che in realtà non mi mancano. Comunque...
Già prima delle modifiche apportate agli script di gestione del blog, avevo abbozzato questo post. Lo scopo era elencare gli script più utili che ho inserito negli anni scorsi in questo "sito" e che sono state oggetto di ultime modifiche, più o meno vistoste. E non solo per quello, ma anche per evidenziarli in quanto nel blog mancava una qualche forma aggiuntiva in tal senso. Poi però, ho creato le etichette e quindi ho tappato anche questa mancanza.
Durante la realizzazione delle modifiche, ho studiato uno schema alternativo a quello mio di solito usato, per far eseguire dei comandi dall'interfaccia grafica per mezzo di G-Script. Sembra complicato, ma il concetto nella pratica è semplice. ![]()
I due schemi quasi sono identici tranne per l'uso di variabili differenti che definiscono gli oggetti dell'operazione, tipicamente file. Il primo utilizza i normali parametri posizionali, o genericamente definibili come argomenti, che vengono dichiarate nel momento in cui si lancia un comando (non sai cosa sono, leggi qui). Per esempio: COMANDO VARIABILE01 VARIABILE02 le "VARIABILI" assegnate al "COMANDO" avranno negli script la seguente forma: $1, $2, etc etc. Nel secondo schema si usano le variabili d'ambiente specificatamente definite per gli G-Script da Nautilus, che sono: NAUTILUS_SCRIPT_SELECTED_FILE_PATHS: percorsi dei file selezionati, delimitati da «newline» (solo se in locale) NAUTILUS_SCRIPT_SELECTED_URIS: URI dei file selezionati, delimitati da «newline» NAUTILUS_SCRIPT_CURRENT_URI: URI della posizione corrente NAUTILUS_SCRIPT_WINDOW_GEOMETRY: posizione e dimensione della finestra corrente
Gli schemi
Negli schemi vedrete una funzione: usa_printf, oramai inclusa in tutti miei script e serve per superare una limitazione di memoria di zenity quando capitano dei messaggi di output particolarmente lunghi. Maggiori info sono disponibili nello specifico post: funzione - usa_printf().
Sotto, quella che vedrete per prima è la struttura principale, che uso normalmente per i miei script, mentre la seconda è quella alternativa che nella generalità dei casi dovrebbe fungere a dovere, ma devo essere sincero non l'ho testata in maniera approfondita.
#!/bin/bash
#
# AUTHOR: Maurizio di NuvoleSparse
#
# License: GNU General Public version 2 or any later version.
# This program comes with ABSOLUTELY NO WARRANTY; for details
# see the COPYING file or visit "http://www.gnu.org/licenses/gpl.html".
# This is free software, and you are welcome to redistribute it under
# certain conditions. See the GPL license for details.
#
# Dependence:
# zenity
# alien
#
usa_printf(){
inizio=0
fine=1024
p=1
while [ $p != ultima ]; do
printf "${temp:inizio:fine}" |
zenity --text-info --title="DimensFiles - directory: $dir - \
parte $p" &
inizio=$(( inizio+1024 ))
fine_ipotetica=$(( inizio+fine ))
if [ ${#temp} -lt $fine_ipotetica ]; then
p="ultima"
printf "${temp:inizio:fine}" | zenity --text-info \
--title="DimensFiles - directory: $dir - parte $p"
break
fi
p=$(( p+1 ))
done
}
##main
if [ $# -eq 0 ]; then
zenity --title="gEXAMPLE" --error --title="Attenzione"\
--text="Seleziona almeno un file."
exit 1
fi
while [ $# -gt 0 ]; do
if echo "$1" | grep -iq ".EXT$"; then
[OPERAZIONE/I] "$1" 2>>/tmp/gEXAMPLE.log
else
echo -e "Attenzione: '$1' non e' un EXT."\
>>/tmp/gEXAMPLE.log
fi
shift
done
if [ -s "/tmp/gEXAMPLE.log" ]; then
temp="$(cat "/tmp/gEXAMPLE.log")"
if [ ${#temp} -gt 1024 ]; then
usa_printf
else
cat "/tmp/gEXAMPLE.log" | zenity --title="Errore - gEXAMPLE"\
--text-info
fi
rm -f /tmp/gEXAMPLE.log || zenity --title="gEXAMPLE" --error\
--title="Attenzione"\
--text="Non e' stato possibile rimuovere il file /tmp/gEXAMPLE.log! :-("
fi
zenity --title="gEXAMPLE" --info --text="Lo script e' terminato."
exit 0
La struttura alternativa:
#!/bin/bash
#
# AUTHOR: Maurizio di NuvoleSparse
#
# License: GNU General Public version 2 or any later version.
# This program comes with ABSOLUTELY NO WARRANTY; for details
# see the COPYING file or visit "http://www.gnu.org/licenses/gpl.html".
# This is free software, and you are welcome to redistribute it under
# certain conditions. See the GPL license for details.
#
# Dependence:
# zenity
# alien
#
usa_printf(){
inizio=0
fine=1024
p=1
while [ $p != ultima ]; do
printf "${temp:inizio:fine}" |
zenity --text-info --title="DimensFiles - directory: $dir - \
parte $p" &
inizio=$(( inizio+1024 ))
fine_ipotetica=$(( inizio+fine ))
if [ ${#temp} -lt $fine_ipotetica ]; then
p="ultima"
printf "${temp:inizio:fine}" | zenity --text-info \
--title="DimensFiles - directory: $dir - parte $p"
break
fi
p=$(( p+1 ))
done
}
##main
if [ -z "$NAUTILUS_SCRIPT_SELECTED_URIS" ]; then
zenity --title="gEXAMPLE" --error --title="Attenzione"\
--text="Seleziona almeno un file."
exit 1
fi
for arg in $NAUTILUS_SCRIPT_SELECTED_URIS; do
arg="`echo $arg | sed -e "s&^file://&&" -e "s/%20/ /g"`"
if echo "$arg" | grep -iq ".EXT$"; then
[OPERAZIONE/I] "$arg" 2>>/tmp/gEXAMPLE.log
else
echo -e "Attenzione: '$arg' non e' un EXT."\
>>/tmp/gEXAMPLE.log
fi
done
if [ -s "/tmp/gEXAMPLE.log" ]; then
temp="$(cat "/tmp/gEXAMPLE.log")"
if [ ${#temp} -gt 1024 ]; then
usa_printf
else
cat "/tmp/gEXAMPLE.log" | zenity --title="Errore - gEXAMPLE"\
--text-info
fi
rm -f /tmp/gEXAMPLE.log || zenity --title="gEXAMPLE" --error\
--title="Attenzione"\
--text="Non e' stato possibile rimuovere il file /tmp/gEXAMPLE.log! :-("
fi
zenity --title="gEXAMPLE" --info --text="Lo script e' terminato."
exit 0
Credo proprio di aver un po' allungato il discorso con delle precisazioni dovute. È arrivato il momento di elencare gli script di cui vi ho parlato all'inizio.
La prima categoria che citerò sono i convertitori:
gaudioconvert, supporta la conversione dei più comuni formati audio;
gimageconvert, supporta la conversione delle immagini dei formati jpeg, png e gif;
grpm2deb, questo è facile;
glit2htm, converte nel formato htm i file in formato MS Reader eBook, cioè con l'estensione .lit;
gtheora2avi, converte i file audio OGG Theora in formati .avi;
per continuare con le utility:
gruota, ruota le immagini;
gsnapshot, usando Imagemagick scatta una foto del proprio desktop o di una singola finestra salvando l'immagine in formato jpeg;
gfusencfs, gestisce dischi virtuali fuse cifrati con encfs oramai superato dal programma Cryptkeeper, a sua volta superato, credo, nella versione 8.10 di Ubuntu;
scroll_lock, abilita la attivazione/disattivazione dalla tastiera dello Scroll Lock(che serva, a parte la retroilluminazione di alcune tastiere, non l'ho mai saputo
).