GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener de forma segura la versión de Ksh?

¿Cómo puedo con seguridad obtener la versión de ksh desde un script ksh?

He visto las siguientes soluciones:

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

Y dadas las circunstancias adecuadas, cada uno de estos funciona correctamente. Sin embargo, me importa el caso no perfecto.

Específicamente, hay varias máquinas con las que trabajo que tienen versiones anteriores de ksh que, para mis propósitos, carecen gravemente de funcionalidad. De todos modos, la razón por la que quiero verificar la versión (mediante programación) es para ver si la versión ksh es una de las versiones menos capaces; y si es así, quiero ejecutar una rama con un código menos impresionante.

Sin embargo, en las máquinas problemáticas, la ineptitud del shell se extiende a comprobar la versión...

  • Si pruebo ksh --version , no imprime nada y abre una nueva instancia de ksh !
  • Si pruebo echo ${.sh.version} , ksh trata esto como un error de sintaxis que no se puede descartar con 2> /dev/null .

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • Por supuesto echo $KSH_VERSION parece funcionar bien, quiero decir que no fallará, aunque en estas máquinas está en blanco. Además, vi en alguna parte que KSH_VERSION está configurado solo por pdksh .

Preguntas:

  • ¿Cómo puedo comprobar de forma segura la versión de ksh? programáticamente? Para mis propósitos aquí, realmente no me importa cuál es el número de versión real, solo si es una versión desactualizada de ksh .
  • Es $KSH_VERSION ¿suficientemente bueno? Quiero decir, si está en blanco, entonces es ksh necesariamente una versión obsoleta? ¿Era correcto ese otro foro que podría no estar configurado incluso para versiones más nuevas de ksh? ?
  • ¿No hay manera de verificar esto en absoluto?

Respuesta aceptada:

KSH_VERSION no se implementó en ksh93 antes de la versión 93t. Se establecerá en mksh , pdksh , lksh . Entonces, para verificar la versión de ksh , podemos probar estos pasos:

  • Comprobando KSH_VERSION para detectar mksh , pdksh , lksh
  • Si el primer paso falla, pruebe una característica diferente entre ksh93 y ksh88/86 (Dejemos que David Korn nos lo muestre).

Con esto en mente, iré con:

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

Linux
  1. ¿Cómo obtener la llave USB para el montaje automático?

  2. ¿Cómo hacer que Uuencode funcione?

  3. ¿Cómo obtener la última versión de Winetricks en Ubuntu?

  4. Cómo obtener el tamaño de tar.gz en un archivo (MB) en python

  5. ¿Cómo obtengo el nombre de usuario en un Makefile?

Cómo verificar la versión del kernel en Linux

Cómo aprovechar al máximo Qmmp 1.0

¿Cómo obtener la última versión de vim en Ubuntu 20.04?

¿Cómo obtener la última versión (beta y desarrollo) de Chromium?

Cómo cambiar la versión de PHP

Cómo comprobar la versión de PHP en Linux