Um padrão que você normalmente verá com scripts de shell Unix é o uso de uma variável para os executáveis nomeados por sua função genérica, por exemplo, $ECHO
. Você terá então uma ou duas funções de nível superior que determinarão a que $ECHO
deve ser definido.
Quando $ECHO
tiver sido definido, em todo o código, você verá isso:
$ECHO "hi"
Isso evita que você tenha que limpar seu código com muitos blocos if..then..else que não têm nada a ver com a funcionalidade de seus scripts e apenas com o interpretador de plataforma que está sendo usado.
Assim, você pode fazer o mesmo com qualquer programa-chave que esteja interessado em trocar, com base em qual interpretador / plataforma está sendo executado.
if (ksh)
then
ECHO=echo1
FILEFIND=whence
else if (sh)
ECHO=echo2
FILEFIND=whereis
else
ECHO=echo3
FILEFIND=which
fi
Você deveria fazer isso?
Eu diria que se você estiver tentando tornar seu script portátil e estiver preocupado com a disponibilidade de determinados intérpretes ou executáveis, é melhor codificar para o menor denominador comum, ou seja, /bin/sh
.
Veja como a Oracle e outras pessoas fazem isso. Eles geralmente fornecem seus instaladores para que eles sejam roteirizados em /bin/sh
. Este é o menor denominador comum quando você entra em suporte em vários Unixes, como Solaris, AIX e Linux.
Veja este guia criado pela Novell intitulado: Criando scripts para portáteis . Ele cobre a linhagem dos vários shells e o conjunto comum de comandos que estão em vários deles, com dicas sobre como lidar com suas sutilezas.