Как я могу безопасно получить версию ksh из сценария ksh?
ksh --version
echo ${.sh.version}
echo $KSH_VERSION
И учитывая правильные обстоятельства, каждый из них работает правильно. Тем не менее, я забочусь о неидеальном случае.
В частности, есть несколько машин, с которыми я работаю, которые имеют более старые версии ksh, которым для моих целей сильно не хватает функциональности. В любом случае, причина, по которой я хочу проверить версию (программно), состоит в том, чтобы увидеть, является ли версия ksh одной из менее способных версий; и если это так, я хочу выполнить ветку с менее удивительным кодом.
Однако на проблемных машинах неспособность оболочки распространяется на проверку версии ...
- Если я попытаюсь
ksh --version
, он ничего не печатает и открывает новый экземплярksh
! Если я попытаюсь
echo ${.sh.version}
,ksh
это воспринимается как синтаксическая ошибка, с которой нельзя отказаться2> /dev/null
.$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution
Конечно,
echo $KSH_VERSION
кажется, что он работает нормально - я имею в виду, что он не потерпит крах - хотя на этих машинах он пустой. Кроме того, я видел где-то, чтоKSH_VERSION
установлено толькоpdksh
.
Вопросов:
- Как я могу безопасно проверить версию
ksh
программно? Для моих целей здесь меня не волнует, каков фактический номер версии, просто является ли это устаревшей версиейksh
. - Это
$KSH_VERSION
достаточно хорошо? Я имею в виду, если оно пустое, тоksh
обязательно устаревшая версия? Был ли этот другой форум правильным, чтобы его нельзя было установить даже для более новых версийksh
? - Нет ли способа проверить это вообще?
PS1
на использование этой функции. Однако Old ksh не поддерживает $()
в PS1
. Так что, если это современная версия ksh, я хочу PS1
использовать созданную мной функцию; если это старая версия, я использую просто $PWD
.