Controlla le dipendenze degli script bash / shell


13

Esiste un metodo / comando per verificare le dipendenze di uno script bash? In altre parole, una risposta a questa domanda: quali librerie dovrebbe installare un utente per eseguire lo script?

Posso farlo manualmente leggendo lo script e controllare quali altre librerie / comandi chiama ma questo non è evidente per gli script lunghi.

Risposte:


8

È stato utilizzato il sistema incredibilmente arcano di autoconf

produrre script di shell per configurare automaticamente i pacchetti di codice sorgente del software. Questi script possono adattare i pacchetti a molti tipi di sistemi simili a UNIX senza l'intervento manuale dell'utente. Autoconf crea uno script di configurazione per un pacchetto da un file modello che elenca le funzionalità del sistema operativo che il pacchetto può utilizzare, sotto forma di chiamate macro M4.

Se non è sufficientemente spaventoso, attendi fino a quando non provi a scrivere il tuo primo script autoconf. Gli autori di autoconf non sono timidi della sua difficoltà :

Coloro che non capiscono Autoconf sono condannati a reinventarlo, male. L'obiettivo principale di Autoconf è semplificare la vita dell'utente; rendere la vita del manutentore più semplice è solo un obiettivo secondario. In altre parole, l'obiettivo principale non è rendere automatica la generazione di configure per i manutentori dei pacchetti; piuttosto, l'obiettivo è rendere la configurazione indolore, portatile e prevedibile per l'utente finale di ciascun pacchetto autoconfiscato. E fino a questo punto, Autoconf ha molto successo nel suo obiettivo: la maggior parte dei reclami nell'elenco Autoconf riguarda difficoltà nella scrittura dell'input di Autoconf e non nel comportamento della configurazione risultante.

D'altra parte, uscirai dal processo sapendo di più sui pezzi difficili di vari sistemi di quanto avresti mai immaginato esistessero.

In questi giorni, personalmente, presumo che il mio obiettivo fosse una distribuzione Debian molto più standard e non mi costringerei a scrivere un altro script autoconf. Sono fortunato ad avere il lusso di sceglierlo; potresti non avere tale latitudine.


3

Questo non è un compito semplice da automatizzare, perché uno script può usare costrutti che vanificano l'analisi statica. Se mai usa evalo un prefisso simile timeo o nice, non sarà semplice come eseguire qualcosa come egrep -o '^[^ ]+ ? 'ottenere comandi ed eseguirli whicho type.

Alla fine, l'unico modo per essere assolutamente sicuri è eseguire lo script e scoprire cosa non funziona. Se uno script è ben scritto, controllerà i comandi non standard prima di eseguirlo. In caso contrario, tentativi ed errori è l'unico modo per essere certi.

Detto questo, qualcosa del genere potrebbe aiutare:

#!/bin/bash
egrep -o -e '^[^ ]+ ? ' -e '[a-zA-Z0-9]+' "$1" | sort -u | {
    while read line
    do
        if type $line &>/dev/null
        then
            echo "$line found"
        else
            echo "Error: $line not found"
        fi
    done
} | sort

L'output sarà simile a:

$ ./check i_wonder.sh
cd found
echo found
elif found
else found
Error: abort not found
Error: checkurl not found
Error: cleanup not found
Error: count not found
Error: debug not found
Error: deleteFile not found
Error: die not found
find found
for found
grep found
if found
mv found
readarray found
rm found
shopt found
size found
sleep found
stat found
trap found
unset found
while found
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.