REDUX: Cum să depășim o incompatibilitate între ksh pe Linux față de cea instalată pe AIX/Solaris/HPUX?

Am descoperit o altă problemă în efortul pe care îl facem să port câteva sute de scripturi ksh de la AIX, Solaris și HPUX la Linux. Consultați aici pentru problema anterioară.

Acest cod:

#!/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).

Din nou, întrebarea mea este:

  • Există o variabilă de mediu care va determina pdksh să se comporte ca ksh93? În lipsă:
  • Există o opțiune pe pdksh pentru a obține comportamentul necesar?
0

4 răspunsuri

După un an, nu pare a fi o soluție la problema mea.

Adaug acest raspuns pentru a spune ca va trebui sa traiesc cu el ......

0
adăugat

Vă dați seama că [este un alias (adesea un link, simbolic sau greu) pentru /usr/bin/test , nu? Deci, probabil, problema reală este diferitele versiuni ale /usr/bin/test ?

OTOH, ksh o suprascrie cu un builtin. Poate că există o cale de ao face să nu facă asta? sau poate aveți un alias explicit [la /usr/bin/test , dacă /usr/bin/test

0
adăugat
[este o comandă încorporată în ambele ksh93 și pdksh ..
adăugat autor Andrew Stein, sursa

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 este încă menționat în multe documente de cerințe de instalare de la furnizorii de software. Am înlocuit pdksh pe toate sistemele noastre Linux cu ksh93 fără probleme până acum.

0
adăugat

în Bash testul - operația este pentru un singur fișier.

Cred că în testul Ksh88 operația este pentru un singur fișier, dar nu se plânge pentru că celelalte cuvinte test sunt o condiție nespecificată pentru a-a.

vrei ceva de genul ăsta

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

Pot sa spun ca ksh93 functioneaza exact ca si bash in aceasta privinta. Din păcate, cred că codul a fost redactat prost, opinia mea și probabil o opinie proastă, deoarece cauza principală a problemei este testul încorporat ksh88 care permite codul nedorit.

0
adăugat