Byłem sfrustrowany wcześniejszymi różnicami w wynikach which
polecenia na różnych platformach (Linux vs. Solaris vx. OS X), z różnymi powłokami, które prawdopodobnie również biorą w tym udział. type
został zaproponowany jako lepsza alternatywa, ale jak by to było przenośne?
W przeszłości pisałem funkcje, które analizują dane wyjściowe which
i obsługują różne przypadki użycia, na które natrafiłem. Działają na różnych komputerach, których używam, więc są w porządku dla moich osobistych skryptów, ale wydaje się to strasznie niewiarygodne w przypadku oprogramowania, które zamierzam zamieścić gdzieś, aby inni mogli z nich korzystać.
Aby wziąć tylko jeden możliwy przykład, załóżmy, że muszę wykryć w skrypcie, czy bash i zsh są dostępne na komputerze, a następnie uruchomić polecenie z zsh, jeśli jest obecny, i z bash, jeśli zsh nie jest, a bash jest wystarczający wersja nie ma określonego błędu. Większość reszty skryptu może być powłoką Bourne'a, Ruby lub czymkolwiek innym, ale ta jedna konkretna rzecz musi zostać wykonana (AFAIK) za pomocą Zsh lub najnowszej wersji bash.
Czy mogę liczyć na type
dostępność na różnych platformach? Czy jest jakaś inna alternatywa, na which
którą można łatwo i konsekwentnie odpowiedzieć na pytanie, czy zainstalowane jest określone oprogramowanie?
(Jeśli chcesz również podać pomysły związane z podanym przeze mnie przykładem, to świetnie, ale pytam głównie o ogólny przypadek: jaki jest najbardziej niezawodny sposób, aby dowiedzieć się, czy konkretna rzecz jest zainstalowana na danym komputerze ?)
hash
icommand -v
.command -v
przejęciatype
, wszystko czego potrzebujemy to logiczna wynik. Do jakich „powszechnie zalecanych technikhash
” korzystasz ?