No século 21, especialmente se você estiver segmentando máquinas com probabilidade de ter bash ou zsh, você poderá contar com type
disponível. (Não existia em uníssonos muito antigos, como nos anos 70 ou início dos anos 80). Você não pode contar com sua saída significando nada, mas você pode contar com o retorno de 0 se houver um comando com esse nome e diferente de zero.
which
não é padrão e não é confiável prática . type
é a alternativa recomendada. whereis
sofre dos mesmos problemas que which
e é menos comum. whence
é específico para ksh e zsh.
Quando isso for possível, seria mais confiável testar a existência de um comando e testar se seu comportamento parece razoável. Por exemplo, teste a presença de uma versão adequada do bash executando bash -c 'somecommand'
, por exemplo
# Test for the '-v' operator (which appeared in bash 4.2)
if bash -c 'test -v HOME' 2>/dev/null; then …
Hoje você pode contar com quase tudo na especificação de especificação Singe UNIX 2 (exceto para coisas exóticas como Fortran e SCCS, que são opcionais de qualquer maneira). Você pode contar com a maior parte da versão 3 , mas isso ainda não está completamente implementado em todos os lugares. O suporte Versão 4 é mais simples. Se você for ler essas especificações, recomendo a versão 3, que é muito mais legível e menos ambígua que a versão 2.
Para exemplos de como detectar especificidades do sistema, veja autoconf e em configure
scripts de vários softwares.
Veja também Recursos para programação de shell portátil para mais dicas.