Comment puis-je obtenir en toute sécurité la version de ksh à partir d'un script ksh?
J'ai vu les solutions suivantes :
ksh --version
echo ${.sh.version}
echo $KSH_VERSION
Et étant donné les bonnes circonstances, chacun de ces travaux fonctionne correctement. Cependant, je me soucie du cas non parfait.
Plus précisément, il y a plusieurs machines avec lesquelles je travaille qui ont des versions plus anciennes de ksh qui, pour mes besoins, manquent gravement de fonctionnalités. Quoi qu'il en soit, la raison pour laquelle je veux vérifier la version (par programme) est de voir si la version ksh est l'une des versions les moins capables; et si oui, je veux exécuter une branche avec du code moins impressionnant.
Cependant, sur les machines problématiques, l'ineptie du shell s'étend à la vérification de la version ...
- Si j'essaye
ksh --version
, il n'imprime rien et ouvre une nouvelle instance deksh
! Si j'essaie
echo ${.sh.version}
,ksh
traite cela comme une erreur de syntaxe qui ne peut pas être éliminée2> /dev/null
.$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution
Bien sûr, cela
echo $KSH_VERSION
semble fonctionner correctement - je veux dire qu'il ne se bloquera pas - bien que sur ces machines, il soit vide. De plus, j'ai vu quelque part quiKSH_VERSION
n'est défini que parpdksh
.
Des questions:
- Comment puis-je vérifier en toute sécurité la version de par
ksh
programme? Pour mes besoins ici, je ne me soucie pas vraiment du numéro de version réel, juste s'il s'agit d'une version obsolète deksh
. - Est-ce
$KSH_VERSION
assez bon? Je veux dire si elle est vide, alors estksh
nécessairement une version obsolète? Est-ce que cet autre forum avait raison de ne pas être défini même pour les nouvelles versions deksh
? - N'y a-t-il simplement aucun moyen de vérifier cela?
PS1
pour utiliser cette fonction. Cependant, Old ksh ne prend pas en charge $()
dans PS1
. Donc, si c'est une version moderne de ksh, je veux PS1
utiliser la fonction que j'ai créée; si c'est l'ancienne version, j'utilise juste $PWD
.