Sono stato frustrato in precedenza con differenze nell'output del which
comando su piattaforme diverse (Linux vs Solaris vx. OS X), con diverse shell che potrebbero giocare anche sulla questione. type
è stata suggerita come alternativa migliore, ma quanto sarebbe portatile?
In passato ho scritto funzioni che analizzano l'output which
e gestiscono i diversi casi d'uso in cui mi sono imbattuto. Funzionano su tutte le macchine che uso, e quindi vanno bene per i miei script personali, ma questo sembra terribilmente inaffidabile per il software che pubblicherò da qualche parte per essere utilizzato da altri.
Per fare solo un possibile esempio, supponiamo che io debba rilevare da uno script se bash e zsh sono disponibili su una macchina, quindi eseguire un comando con zsh se è presente e con bash se zsh non lo è e bash è sufficiente versione per non avere un bug particolare. La maggior parte del resto dello script potrebbe essere Bourne shell o Ruby o qualsiasi altra cosa, ma questa cosa particolare deve essere fatta (AFAIK) con zsh o una versione recente di bash.
Posso contare sulla type
disponibilità su più piattaforme? Esiste un'altra alternativa a which
cui è possibile rispondere in modo semplice e coerente alla domanda se un particolare software è installato?
(Se vuoi anche dare idee specificamente correlate all'esempio che ho dato, è fantastico, ma principalmente sto solo chiedendo il caso generale: qual è il modo più affidabile per scoprire se una determinata cosa è installata su una determinata macchina ?)
hash
ecommand -v
.