REDUX:So überwinden Sie eine Inkompatibilität zwischen dem ksh unter Linux vs.das auf AIX/Solaris/HPUX installiert?

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

Frage

Bei den Bemühungen, mehrere Hundert KSH-Skripte von AIX, Solaris und HPUX nach Linux zu portieren, habe ich ein weiteres Problem entdeckt.Sehen Hier für das vorherige Problem.

Dieser Code:

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

(Wenn Sie in einem Verzeichnis mit mehreren Dateien ausgeführt werden, deren Name mit K beginnt) erzeugt "Oh ja!" wenn mit den AT & T KSH -Varianten (KSH88 und KSH93) angerufen.Andererseits erzeugt es und Fehlermeldung, gefolgt von "No Way!" auf den anderen KSH -Varianten (PDKSH, MKS KSH und BASH).

Nochmals meine Frage:

  • Gibt es eine Umgebungsvariable, die dazu führt, dass sich pdksh wie ksh93 verhält?Gelingt das nicht:
  • Gibt es in pdksh eine Option, um das erforderliche Verhalten zu erhalten?
War es hilfreich?

Lösung 2

Nun nach einem Jahr scheint es keine Lösung für mein Problem zu sein.

Ich füge diese Antwort zu sagen, dass ich mit ihm leben müssen ......

Andere Tipps

Ich würde nicht pdksh auf Linux verwenden mehr. Da AT & T ksh Open Source geworden sind Pakete aus den verschiedenen Linux-Distributionen. Z.B. RedHat Enterprise Linux und CentOS umfassen als die "KSH" RPM-Paket ksh93.

pdksh ist nach wie vor in vielen Installationsanforderungen Dokumentationen von Softwareanbietern erwähnt. Wir ersetzten pdksh auf allen Linux-Systemen mit ksh93 ohne Probleme so weit.

in Bash die Test -a Operation ist für eine einzelne Datei.

Ich vermute, dass in ksh88 die Test -a Operation für eine einzelne Datei ist, aber nicht beschweren, weil die anderen Testworte eine nicht spezifizierte Bedingung zum -a sind.

Sie wollen so etwas wie

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

kann ich sagen, dass ksh93 wie bash in dieser Hinsicht funktioniert. Leider denke ich, der Code schlecht geschrieben, meine Meinung nach, und wahrscheinlich eine schlechte Meinung, da die Ursache des Problems ist die ksh88 eingebaute Test für schlampigen Code ermöglicht.

Sie wissen, dass [ ein Alias ​​(oft ein Link, symbolisch oder hart) für ist /usr/bin/test, Rechts?Vielleicht liegt das eigentliche Problem also in verschiedenen Versionen von /usr/bin/test ?

OTOH, ksh überschreibt es mit einem eingebauten.Vielleicht gibt es eine Möglichkeit, das zu verhindern?oder vielleicht können Sie [ to explizit aliasen /usr/bin/test, Wenn /usr/bin/test auf allen Plattformen ist kompatibel?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top