Jak mogę bezpiecznie pobrać wersję ksh ze skryptu ksh?
Ja widziałem następujące rozwiązania :
ksh --version
echo ${.sh.version}
echo $KSH_VERSION
Biorąc pod uwagę odpowiednie okoliczności, każda z nich działa poprawnie. Dbam jednak o niedoskonały przypadek.
W szczególności istnieje kilka maszyn, z którymi współpracuję, które mają starsze wersje ksh, które, moim zdaniem, są bardzo pozbawione funkcjonalności. W każdym razie powodem, dla którego chcę sprawdzić wersję (programowo), jest sprawdzenie, czy wersja ksh jest jedną z mniej zdolnych wersji; a jeśli tak, chcę wykonać gałąź z mniej niesamowitym kodem.
Jednak na problematycznych maszynach nieudolność powłoki rozciąga się na sprawdzenie wersji ...
- Jeśli spróbuję
ksh --version
, nic nie drukuje i otwiera nową instancjęksh
! Jeśli spróbuję
echo ${.sh.version}
,ksh
potraktuje to jako błąd składniowy, którego nie można usunąć2> /dev/null
.$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution
Oczywiście
echo $KSH_VERSION
wydaje się, że działa dobrze - mam na myśli to, że się nie zawiesi - choć na tych komputerach jest pusty. Również widziałem gdzieś , żeKSH_VERSION
jest ustawiony tylkopdksh
.
Pytania:
- Jak mogę bezpiecznie sprawdzić wersję
ksh
programowo? Dla moich celów nie obchodzi mnie, jaki jest rzeczywisty numer wersji, tylko czy jest to przestarzała wersjaksh
. - Czy
$KSH_VERSION
wystarczy? Mam na myśli to, że jeśli jest puste, toksh
koniecznie jest nieaktualna wersja? Czy to drugie forum było prawidłowe, że może nie być ustawione nawet dla nowszych wersjiksh
? - Czy po prostu w ogóle nie można tego sprawdzić?
PS1
do korzystania z tej funkcji. Jednak Old ksh nie obsługuje $()
w PS1
. Więc jeśli jest to nowoczesna wersja ksh, chcę PS1
użyć funkcji, którą stworzyłem; jeśli to stara wersja, używam tylko $PWD
.