Як я можу безпечно отримати версію 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
використовувати цю функцію. Однак, Старий КШ не підтримує $()
в PS1
. Отже, якщо це сучасна версія ksh, я хочу PS1
використовувати функцію, яку я створив; якщо це стара версія, я використовую просто $PWD
.