Antes, fiquei frustrado com as diferenças na saída do which
comando em diferentes plataformas (Linux vs. Solaris vx. OS X), com diferentes shells possivelmente envolvidos no problema. type
foi sugerido como uma alternativa melhor, mas quão portátil seria?
No passado, escrevi funções que analisam a saída which
e lidam com os diferentes casos de uso nos quais eu me deparei. Eles funcionam em todas as máquinas que eu uso e, portanto, são válidos para meus scripts pessoais, mas isso parece muito pouco confiável para o software que vou postar em algum lugar para que outros possam usar.
Para pegar apenas um exemplo possível, suponha que eu precise detectar em um script se o bash e o zsh estão disponíveis em uma máquina e, em seguida, execute um comando com o zsh, se estiver presente, e com o bash, se o zsh não estiver e o bash for suficiente versão para não ter um bug específico. A maior parte do restante do script pode ser shell Bourne ou Ruby ou qualquer outra coisa, mas isso deve ser feito (AFAIK) com o zsh ou uma versão recente do bash.
Posso contar com type
a disponibilidade em várias plataformas? Existe alguma outra alternativa para a which
qual possa responder fácil e consistentemente à questão de saber se um determinado software está instalado?
(Se você também quiser fornecer idéias especificamente relacionadas ao exemplo que dei, isso é ótimo, mas estou apenas perguntando sobre o caso geral: qual é a maneira mais confiável de descobrir se uma coisa específica está instalada em uma determinada máquina ?)
hash
ecommand -v
.