REDUX: ¿Cómo superar una incompatibilidad entre el ksh en Linux y el que está instalado en AIX/Solaris/HPUX?

He descubierto otro problema en el esfuerzo que estamos haciendo para portar varios cientos de scripts ksh de AIX, Solaris y HPUX a Linux. Consulte aquí para el problema anterior.

Este código:

#!/bin/ksh
if [ -a k* ]; then
    echo "Oh yeah!"
else
    echo "No way!"
fi
exit 0

(when run in a directory with several files whose name starts with k) produces "Oh yeah!" when called with the AT&T ksh variants (ksh88 and ksh93). On the other hand it produces and error message followed by "No way!" on the other ksh variants (pdksh, MKS ksh and bash).

De nuevo, mi pregunta es:

  • ¿Hay una variable de entorno que haga que pdksh se comporte como ksh93? En su defecto:
  • ¿Hay alguna opción en pdksh para obtener el comportamiento requerido?
0
agregado editado
Puntos de vista: 2

4 Respuestas

Bien después de un año, parece que no hay solución para mi problema.

Estoy agregando esta respuesta para decir que tendré que vivir con eso ......

0
agregado

Te das cuenta de que [es un alias (a menudo un enlace, simbólico o difícil) para /usr/bin/test , ¿verdad? Entonces, ¿quizás el problema real es diferentes versiones de /usr/bin/test ?

OTOH, ksh lo reemplaza con un built-in. Tal vez hay una manera de conseguir que no haga eso? o tal vez puede alias explícitamente [a /usr/bin/test , si /usr/bin/test en todas las plataformas es compatible?

0
agregado
[es un comando incorporado tanto en ksh93 como en pdksh ..
agregado el autor Andrew Stein, fuente

I wouldn't use pdksh on Linux anymore. Since AT&T ksh has become OpenSource there are packages available from the various Linux distributions. E.g. RedHat Enterprise Linux and CentOS include ksh93 as the "ksh" RPM package.

pdksh todavía se menciona en muchas documentaciones de requisitos de instalación de proveedores de software. Reemplazamos pdksh en todos nuestros sistemas Linux con ksh93 sin problemas hasta el momento.

0
agregado

en Bash, la operación de prueba -a es para un solo archivo.

Supongo que en Ksh88 la operación de prueba -a es para un solo archivo, pero no se queja porque las otras palabras de prueba son una condición no especificada para -a.

quieres algo así como

for K in /etc/rc2.d/K* ; do test -a $K && echo heck-yea ; done

Puedo decir que ksh93 funciona igual que bash en este sentido. Lamentablemente, creo que el código fue escrito mal, mi opinión, y probablemente una mala opinión ya que la causa raíz del problema es la prueba incorporada ksh88 que permite un código descuidado.

0
agregado