Як я можу безпечно отримати версію ksh із сценарію ksh?
ksh --versionecho ${.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.