GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere in sicurezza la versione di Ksh?

Come posso sicuro ottenere la versione di ksh da uno script ksh?

Ho visto le seguenti soluzioni:

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

E date le giuste circostanze, ognuno di questi 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, per i miei scopi, sono gravemente carenti di funzionalità. Ad ogni modo, il motivo per cui voglio controllare la versione (a livello di codice) è vedere se la versione ksh è una delle versioni meno capaci; e se è così, 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 di ksh !
  • Se provo echo ${.sh.version} , ksh tratta questo come un errore di sintassi che non può essere eliminato con 2> /dev/null .

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • Ovviamente echo $KSH_VERSION sembra funzionare bene – voglio dire che non si arresterà in modo anomalo – anche se su queste macchine è vuoto. Inoltre, ho visto da qualche parte quel KSH_VERSION è impostato solo da pdksh .

Domande:

  • Come posso controllare in sicurezza la versione di ksh programmaticamente? Per i miei scopi qui, non mi interessa davvero quale sia il numero di versione effettivo, solo se si tratta di una versione obsoleta di ksh .
  • È $KSH_VERSION abbastanza buono? Voglio dire, se è vuoto, allora è ksh necessariamente una versione obsoleta? L'altro forum era corretto che potrebbe non essere impostato anche per le versioni più recenti di ksh ?
  • Non c'è proprio modo di verificarlo?

Risposta accettata:

KSH_VERSION non è stato implementato in ksh93 prima della versione 93t. Sarà impostato in mksh , pdksh , lksh . Quindi per controllare la versione di ksh , possiamo provare questi passaggi:

  • Controllo KSH_VERSION per rilevare mksh , pdksh , lksh
  • Se il primo passaggio non riesce, prova una funzione diversa da ksh93 e ksh88/86 (Ci mostri David Korn).

Con questi in mente, andrò con:

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

Linux
  1. Come controllare la versione del sistema operativo e di Linux

  2. Come ottenere la dimensione di tar.gz nel file (MB) in python

  3. Come ottengo il nome utente in un Makefile?

  4. Come ottenere PYTHONPATH nella shell?

  5. Come ottenere l'ID del processo per terminare un processo nohup?

Come controllare la versione del kernel in Linux

Come ottenere il massimo da Qmmp 1.0

Come ottenere l'ultima versione di vim su Ubuntu 20.04?

Come ottenere l'ultima versione (beta e sviluppo) di Chromium?

Come modificare la versione PHP

Come controllare la versione PHP su Linux