pubblicato Sabato 15 Novembre del 2008 alle 19:15.

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. [smile]

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 [confused]).

Attenzione: gli script sono pubblicati SOLO a scopo dimostrativo (didattico) e ASSOLUTAMENTE SENZA GARANZIA: l'autore nega qualsiasi responsabilità di danni riscontrabili a seguito del loro uso (mancato funzionamento, errori ed eventuale perdita di dati, etc). Gli script sono pubblicati con la licenza d'uso GNU General Public License, peraltro ottenibile al seguente link GNU/GPL.

powered by FreeFind
Il sito è una creazione di Maurizio... ed è pubblicato sotto una Licenza CC; esso non viene aggiornato
in maniera periodica, pertanto non può essere considerato un prodotto editoriale ai sensi della legge n. 62 del 7.03.2001.