Como posso obter com segurança a versão do ksh de um script ksh?
ksh --version
echo ${.sh.version}
echo $KSH_VERSION
E, dadas as circunstâncias corretas, cada uma delas funciona corretamente. No entanto, eu me preocupo com o caso não perfeito.
Especificamente, existem várias máquinas com as quais trabalho que possuem versões mais antigas do ksh que, para meus propósitos, estão com uma falta grave de funcionalidade. De qualquer forma, o motivo pelo qual desejo verificar a versão (programaticamente) é ver se a versão ksh é uma das versões menos capazes; e, se assim for, quero executar um ramo com código menos impressionante.
No entanto, nas máquinas problemáticas, a inaptidão do shell se estende à verificação da versão ...
- Se eu tentar
ksh --version
, ele não imprime nada e abre uma nova instância doksh
! Se eu tentar
echo ${.sh.version}
,ksh
trata isso como um erro de sintaxe que não pode ser descartado2> /dev/null
.$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution
É claro que
echo $KSH_VERSION
parece funcionar bem - quero dizer, não falhará - embora nessas máquinas esteja em branco. Além disso, eu vi em algum lugar queKSH_VERSION
é definido apenas porpdksh
.
Questões:
- Como posso verificar com segurança a versão do
ksh
programaticamente? Para meus propósitos aqui, eu realmente não me importo com o número da versão real, apenas se é uma versão desatualizada doksh
. - É
$KSH_VERSION
bom o suficiente? Quero dizer, se estiver em branco, então éksh
necessariamente uma versão desatualizada? Esse outro fórum estava correto e pode não ser definido mesmo para versões mais recentesksh
? - Não há como verificar isso?
PS1
para usar essa função. No entanto, ksh Velho não suporta $()
no PS1
. Portanto, se é uma versão moderna do ksh, quero PS1
usar a função que criei; se é a versão antiga, eu uso apenas $PWD
.