REDUX: Comment surmonter une incompatibilité entre le ksh sous Linux et celui installé sous AIX / Solaris / HPUX?

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

Question

J'ai découvert un autre problème dans les efforts que nous déployons pour porter plusieurs centaines de scripts ksh d'AIX, Solaris et HPUX à Linux. Voir ici pour le problème précédent.

Ce code:

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

(lorsqu’il est exécuté dans un répertoire contenant plusieurs fichiers dont le nom commence par k) produit "Oh ouais!" lorsqu’il est appelé avec les variantes AT & T ksh (ksh88 et ksh93). D'autre part, il produit un message d'erreur suivi de "No way!". sur les autres variantes de ksh (pdksh, MKS ksh et bash).

Encore une fois, ma question est la suivante:

  • Existe-t-il une variable d'environnement qui entraînera le comportement de pdksh comme ksh93? En cas d'échec:
  • Existe-t-il une option sur pdksh pour obtenir le comportement requis?
Était-ce utile?

La solution 2

Après un an, il ne semble pas y avoir de solution à mon problème.

J'ajoute cette réponse pour dire que je devrai vivre avec elle ......

Autres conseils

Je n’utiliserais plus pdksh sous Linux. Depuis que AT & T ksh est devenu OpenSource, des packages sont disponibles à partir des différentes distributions Linux. Par exemple. RedHat Enterprise Linux et CentOS incluent ksh93 en tant que "ksh". Package RPM.

pdksh est toujours mentionné dans de nombreuses documentations sur les exigences d'installation fournies par les fournisseurs de logiciels. Nous avons remplacé pdksh sur tous nos systèmes Linux par ksh93 sans aucun problème jusqu'à présent.

dans Bash, l'opération -a test concerne un seul fichier.

J'imagine que dans Ksh88, l'opération -a test concerne un seul fichier, mais ne se plaint pas, car les autres mots du test sont une condition non spécifiée pour -a.

vous voulez quelque chose comme

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

Je peux dire que ksh93 fonctionne exactement comme bash à cet égard. Malheureusement, je pense que le code a été mal écrit, à mon avis, et probablement une mauvaise opinion, car la cause fondamentale du problème est le test intégré ksh88 permettant un code peu soigné.

Vous réalisez que [est un alias (souvent un lien, symbolique ou physique) pour / usr / bin / test , n'est-ce pas? Alors peut-être que le problème actuel est lié à différentes versions de / usr / bin / test ?

OTOH, ksh la remplace par une commande intégrée. Peut-être qu'il y a un moyen de le faire pour ne pas faire ça? ou peut-être que vous pouvez explicitement alias [to / usr / bin / test , si / usr / bin / test sur toutes les plateformes est compatible?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top