Se você quiser verificar se todos deles estão instalados, faça o seguinte:
hash foo bar baz &>/dev/null &&
echo "All programs installed" ||
echo "At least one program is missing"
O &>
redireciona o erro padrão e a saída padrão para /dev/null
, para que você não imprima a saída de hash
. Você provavelmente só precisa de 2>
, já que, até onde eu sei, hash
só imprime para stderr, mas também podemos estar no lado seguro.
O &&
significa que o próximo comando só será executado se o anterior tiver sido bem-sucedido. O ||
significa que o próximo comando só será executado se o anterior falhar. Portanto, se um dos três (ou N) programas que você verificou não estiver instalado, você receberá a mensagem de erro.
Se você deseja saber qual programa não está instalado, use este:
for p in foo bar baz; do
hash "$p" &>/dev/null && echo "$p is installed" ||
echo "$p is not installed"
done
Por fim, para um controle ainda mais refinado e uma saída detalhada, você pode:
i=0; n=0; progs=(foo bar baz);
for p in "${progs[@]}"; do
if hash "$p" &>/dev/null
then
echo "$p is installed"
let c++
else
echo "$p is not installed"
let n++
fi
done
printf "%d of %d programs were installed.\n" "$i" "${#progs[@]}"
printf "%d of %d programs were missing\n" "$n" "${#progs[@]}"