Come posso ottenere in sicurezza la versione di ksh da uno script ksh?
Ho visto le seguenti soluzioni :
ksh --version
echo ${.sh.version}
echo $KSH_VERSION
E date le giuste circostanze, ognuna di queste funziona correttamente. Tuttavia, mi interessa il caso non perfetto.
In particolare, ci sono diverse macchine con cui lavoro che hanno versioni precedenti di ksh che, ai miei scopi, sono gravemente carenti di funzionalità. Comunque, il motivo per cui voglio controllare la versione (a livello di codice) è vedere se la versione ksh è una delle versioni meno capaci; e in tal caso, voglio eseguire un ramo con un codice meno impressionante.
Tuttavia, sulle macchine problematiche, l'inettitudine della shell si estende al controllo della versione ...
- Se provo
ksh --version
, non stampa nulla e apre una nuova istanza diksh
! Se ci provo
echo ${.sh.version}
, loksh
tratta come un errore di sintassi che non può essere scartato2> /dev/null
.$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution
Ovviamente
echo $KSH_VERSION
sembra funzionare bene - intendo che non si bloccherà - sebbene su queste macchine sia vuoto. Inoltre, ho visto da qualche parte cheKSH_VERSION
è impostato solo dapdksh
.
Domande:
- Come posso verificare in modo sicuro la versione di a livello di
ksh
codice? Per i miei scopi qui, non mi interessa davvero quale sia il numero di versione attuale, sia che si tratti di una versione obsoleta diksh
. - È
$KSH_VERSION
abbastanza buono? Voglio dire se è vuoto, quindi èksh
necessariamente una versione obsoleta? Quell'altro forum aveva ragione sul fatto che potrebbe non essere impostato anche per le versioni più recenti diksh
? - Non c'è proprio modo di verificarlo?
PS1
per utilizzare questa funzione. Tuttavia, Vecchio ksh non supporta $()
in PS1
. Quindi, se è una versione moderna di ksh, voglio PS1
usare la funzione che ho creato; se è la vecchia versione, io uso solo $PWD
.