Repository 32bit  Forum
Repository 64bit  Wiki

Fmanifest

Da Slacky.eu.

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 targzeta <targzeta@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 targzeta <targzeta@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.
Strumenti personali
Namespace

Varianti