sabato 17 novembre 2012

Shell Script Trick: command

In molti dei miei shell scripts utilizzo delle variabili per memorizzare la posizione assolutadei comandi che lo script andra' ad eseguire, come ad esempio:


#!/bin/sh

PERL_CMD=`which perl`
SED_CMD=$( which sed )

...

if [ -z "$PERL_CMD" ]
then
   echo "Perl executable not found!"
   exit 1
fi

if [ -z "$SED_CMD" ]
then
   echo "Sed executable not found!"
    exit 1
fi

...


Come si puo' notare lo script controlla le proprie dipendenze andando a verificare che ogni variabile/comando sia correttamente valorizzata, altrimenti significa che lo script non ha trovato uno dei comandi (non builtin) richiesti e quindi non puo' procedre.
Questa procedura e' abbastanza laboriosa e ha un problema di performance: ad ogni invocazione di which viene aperto un sottoprocesso che si occupa di cercare il comando specificato.
Grazie ad alcuni suggerimenti ho scoperto un comando builtin, command, che verifica e restituisce il percorso assoluto di un comando senza bisogno di lanciare sotto-processi, quindi con ovvio aumento di performance. Sostanzialmente il comando command si
preoccupa di cercare un programma in ogni entry del $PATH. Il codice quindi diviene:


#!/bin/sh

PERL_CMD=`command perl`
SED_CMD=$( command sed )

...

if [ -z "$PERL_CMD" ]
then
   echo "Perl executable not found!"
   exit 1
fi

if [ -z "$SED_CMD" ]
then
   echo "Sed executable not found!"
   exit 1
fi

...

Nessun commento: