GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir en toute sécurité la version de Ksh ?

Comment puis-je en toute sécurité obtenir la version de ksh depuis un script ksh ?

J'ai vu les solutions suivantes :

  1. ksh --version
  2. echo ${.sh.version}
  3. echo $KSH_VERSION

Et dans les bonnes circonstances, chacun de ces éléments 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 cruellement de fonctionnalités. Quoi qu'il en soit, la raison pour laquelle je souhaite vérifier la version (par programme) est de voir si la version ksh est l'une des versions les moins performantes. et si c'est le cas, je veux exécuter une branche avec un code moins génial.

Cependant, sur les machines problématiques, l'incompétence du shell va jusqu'à vérifier la version…

  • Si j'essaie ksh --version , il n'imprime rien et ouvre une nouvelle instance de ksh !
  • Si j'essaie echo ${.sh.version} , ksh traite cela comme une erreur de syntaxe qui ne peut pas être ignorée avec 2> /dev/null .

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • Bien sûr echo $KSH_VERSION semble fonctionner correctement - je veux dire qu'il ne plantera pas - bien que sur ces machines, il soit vide. Aussi, j'ai vu quelque part que KSH_VERSION est défini uniquement par pdksh .

Question :

  • Comment puis-je vérifier en toute sécurité la version de ksh ? par programmation ? 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 de ksh .
  • Est $KSH_VERSION assez bien? Je veux dire si c'est vide, alors c'est ksh forcément une version obsolète ? Cet autre forum avait-il raison de dire qu'il pourrait ne pas être défini même pour les nouvelles versions de ksh ?
  • N'y a-t-il tout simplement aucun moyen de vérifier cela ?

Réponse acceptée :

KSH_VERSION n'a pas été implémenté dans ksh93 avant la version 93t. Il sera défini dans mksh , pdksh , lksh . Donc, pour vérifier la version de ksh , nous pouvons essayer ces étapes :

  • Vérification de KSH_VERSION pour détecter mksh , pdksh , lksh
  • Si la première étape échoue, essayez une fonctionnalité différente entre ksh93 et ksh88/86 (Laissons David Korn nous montrer).

En gardant cela à l'esprit, je vais choisir :

case "$KSH_VERSION" in
  (*MIRBSD*|*PD*|*LEGACY*) printf '%sn' "$KSH_VERSION" ;;
  (*) [ -z "$ERRNO" ] && printf '%sn' "${.sh.version}" || echo ksh88/86 ;;
esac

Linux
  1. Comment vérifier la version du système d'exploitation et de Linux

  2. Comment obtenir la clé USB pour le montage automatique ?

  3. Comment faire fonctionner Uuencode ?

  4. Comment obtenir le PYTHONPATH en shell?

  5. Comment obtenir l'ID de processus pour tuer un processus nohup ?

Comment vérifier la version du noyau sous Linux

Comment tirer le meilleur parti de Qmmp 1.0

Comment obtenir la dernière version de vim sur Ubuntu 20.04 ?

Comment obtenir la dernière version (bêta et développement) de Chromium ?

Comment changer la version de PHP

Comment vérifier la version de PHP sous Linux