Fmanifest
Da Slacky.eu.
Versione delle 14:24, 27 set 2011, autore: Targzeta (Discussione | contributi)
Descrizione
Cerca una espressione regolare nel file MANIFEST.bz2 della Slackware e stampa il nome del pacchetto che la contiene. Utile per cercare il nome del pacchetto che contiene una determinata libreria o un determinato binario.
Script
#!/bin/bash
# Ultimo Aggiornamento 20 febbraio 2011
# by Spina <spina80@gmail.com>
# Per l'help digitare
# fMANIFEST -h
#####################################################################################################
# Cerca una espressione regolare nel file MANIFEST.bz2 della Slackware e stampa il nome del #
# pacchetto che la contiene. Utile per cercare il nome del pacchetto che contiene una determinata #
# libreria o un determinato binario. #
# #
# NOTE: L'espressione regolare NON deve essere messa tra //, ma semplicemente va quotata, se #
# necessario, per evitare l'interpretazione della shell bash. #
# #
# Per maggiore informazioni sull'uso delle espressioni regolari vedere la pagina regexp(7) #
# del manuale. #
# #
# ESEMPIO: Se si vuole sapere il nome del pacchetto che contiene il comando chroot si può eseguire: #
# #
# fMANIFEST chroot #
# #
# però questo farà si che verranno stampati anche i pacchetti che contengono un file #
# chiamato chroot. #
# Per cercare il pacchetto che contiene proprio il comando chroot è più consigliato #
# eseguire: #
# #
# fMANIFEST 'bin\/chroot\>' #
# #
# che stampa solo i pacchetti che contengono esattamente un nomefile che finisce con #
# bin/chroot. Si noti che si è dovuto quotare tra apici ('') l'espressione regolare per #
# proteggerla dall'interpretazione della shell. #
# #
#####################################################################################################
# Nome dello script, per eventuali modifiche
S_N=fMANIFEST;
function help()
{
echo -e "Uso: $S_N [OPZIONE]... regexp\n\n\
Cerca l'espressione regolare regexpr in MANIFEST.bz2 e stampa il nome del pacchetto \
in cui si trova.\n\n\
-f path\tIl percorso del file MANIFEST.bz2\n\
-h\t\tMostra queste informzaioni ed esce\n\n\
Se l'opzione -f non è data, suppone che il file MANIFEST.bz2 sia nella directory \
corrente.\n\n\
by Spina <spina80@gmail.com>"
exit;
}
function _exit()
{
echo "$S_N -h per maggiori informazioni.";
exit;
}
function check_ext_prog()
{
# Controllo il comando bunzip2
( ! /bin/which $1 >& /dev/null ) &&\
echo "Manca il comando $1 necessiaro per l'esecuzione dello script." && return 1;
return 0;
}
# ----- CHECK PROGRAMMI ESTERNI ------ #
# Controllo dei programmi esterni necessari allo script
# Se non c'è il comando which, salto il controllo
if [ -x /bin/which ];
then
( ! check_ext_prog bunzip2 ) && err=1;
( ! check_ext_prog awk ) && err=1;
# In caso mancasse uno dei programmi esterni, esco.
(( $err )) && exit;
fi
# ----- CHECK OPZIONI ----- #
# Controllo gli argomenti in cerca di opzioni
while
getopts :hf: option
do
case $option in
f) file=$OPTARG;;
h) help;;
*) echo -e "$0: Opzione illegale -- $OPTARG.\n";_exit;;
esac
done
# Shifto gli argomenti in modo che $1 punti all'espressione regolare da cercare
while
(( $OPTIND != 1 ))
do
shift;
let --OPTIND;
done
# ----- CHECK FILE E VARIABILI ----- #
# Controllo che l'espressione regolare esista tra gli argomenti inseriti
[ -z "$1" ] && echo -e "Manca l'espressione regolare da cercare.\n" && _exit;
# Se l'opzioni -f non è stata inserita, inizializzo $file.
[ -z "$file" ] && file=./MANIFEST.bz2;
# Controllo che $file esista
[ ! -f "$file" ] && echo ""$file" -- File non trovato." && exit;
# ----- ESECUZIONE VERA E PROPRIA -----#
#Tutto ok, inizio la scansione del file MANIFEST.bz2
bunzip2 -c "$file" |\
awk '/^\|\| Package: /{package=$0;cont=0;next;}'\
/"$1"/'{if ( cont == 0 ){print package;cont=1;}; print $0;}'
# NOTA: La viariabile cont in awk server nel caso in cui una espressione regolare
# ricorra più volte nello stesso pacchetto.
- Data: 03 Jun 2006
- Autore: Spina