GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bekomme ich sicher die Version von Ksh?

Wie kann ich sicher die Version von ksh aus einem ksh-Skript abrufen?

Ich habe die folgenden Lösungen gesehen:

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

Und unter den richtigen Umständen funktioniert jedes davon richtig. Ich kümmere mich jedoch um den nicht perfekten Fall.

Insbesondere gibt es mehrere Maschinen, mit denen ich arbeite, die ältere Versionen von ksh haben, denen es für meine Zwecke stark an Funktionalität mangelt. Wie auch immer, der Grund, warum ich die Version (programmgesteuert) überprüfen möchte, ist, um zu sehen, ob die ksh-Version eine der weniger leistungsfähigen Versionen ist; und wenn ja, möchte ich einen Branch mit weniger tollem Code ausführen.

Auf den problematischen Maschinen erstreckt sich die Unfähigkeit der Shell jedoch auf die Überprüfung der Version …

  • Wenn ich ksh --version versuche , es gibt nichts aus und öffnet eine neue Instanz von ksh !
  • Wenn ich versuche echo ${.sh.version} , ksh behandelt dies als Syntaxfehler, der nicht mit 2> /dev/null verworfen werden kann .

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • Natürlich echo $KSH_VERSION scheint gut zu funktionieren – ich meine, es wird nicht abstürzen – obwohl es auf diesen Maschinen leer ist. Außerdem habe ich irgendwo diese KSH_VERSION gesehen wird nur von pdksh gesetzt .

Fragen:

  • Wie kann ich die Version von ksh sicher überprüfen programmatisch? Für meine Zwecke hier interessiert mich die tatsächliche Versionsnummer nicht wirklich, nur ob es sich um eine veraltete Version von ksh handelt .
  • Ist $KSH_VERSION gut genug? Ich meine, wenn es leer ist, dann ist es ksh unbedingt eine veraltete Version? War das andere Forum richtig, dass es möglicherweise nicht einmal für neuere Versionen von ksh eingestellt ist? ?
  • Gibt es überhaupt keine Möglichkeit, dies zu überprüfen?

Akzeptierte Antwort:

KSH_VERSION wurde in ksh93 nicht implementiert vor Version 93t. Es wird in mksh gesetzt , pdksh , lksh . Also zum Überprüfen der Version von ksh , können wir diese Schritte ausprobieren:

  • Überprüfe KSH_VERSION um mksh zu erkennen , pdksh , lksh
  • Wenn der erste Schritt fehlschlägt, versuchen Sie eine Funktion, die sich von ksh93 unterscheidet und ksh88/86 (Lass uns David Korn zeigen).

In Anbetracht dessen gehe ich mit:

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

Linux
  1. Wie bekomme ich Uuencode zum Laufen?

  2. Wie bekomme ich die neueste Version von Winetricks auf Ubuntu?

  3. So erhalten Sie die Größe von tar.gz in (MB) Datei in Python

  4. Wie bekomme ich den Benutzernamen in ein Makefile?

  5. Wie bekomme ich den PYTHONPATH in der Shell?

So überprüfen Sie die Kernel-Version in Linux

So holen Sie das Beste aus Qmmp 1.0 heraus

Wie bekomme ich die neueste Version von vim auf Ubuntu 20.04?

Wie bekomme ich die neueste (Beta- und Entwicklungs-)Version von Chromium?

So ändern Sie die PHP-Version

So überprüfen Sie die PHP-Version unter Linux