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

StackOverflow https://stackoverflow.com/questions/96133

Pregunta

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

Este código:

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

(Cuando se ejecuta en un directorio con varios archivos cuyo nombre comienza con K) produce "¡Oh, sí!" cuando se les llama con las variantes AT&T KSH (KSH88 y KSH93).Por otro lado, produce un mensaje de error seguido de "¡No hay forma!" En las otras variantes de KSH (PDKSH, MKS KSH y BASH).

Nuevamente, mi pregunta es:

  • ¿Existe una variable de entorno que hará que pdksh se comporte como ksh93?Fallando en eso:
  • ¿Existe una opción en pdksh para obtener el comportamiento requerido?
¿Fue útil?

Solución 2

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

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

Otros consejos

Ya no usaría pdksh en Linux.Desde que AT&T ksh se ha convertido en OpenSource, hay paquetes disponibles de las distintas distribuciones de Linux.P.ej.RedHat Enterprise Linux y CentOS incluyen ksh93 como paquete RPM "ksh".

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 ahora.

en Bash la operación test -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 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 se escribió mal, en mi opinión, y probablemente sea una mala opinión, ya que la causa principal del problema es la prueba incorporada ksh88 que permite un código descuidado.

Te das cuenta de que [ es un alias (a menudo un vínculo, simbólico o físico) para /usr/bin/test, ¿bien?Entonces, tal vez el problema real sean las diferentes versiones de /usr/bin/test ?

OTOH, ksh lo anula con un archivo incorporado.¿Quizás haya una manera de lograr que no haga eso?o tal vez puedas explícitamente alias [ a /usr/bin/test, si /usr/bin/test en todas las plataformas es compatible?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top