REDUX: Как преодолеть несовместимость между ksh в Linux и установленным в AIX/Solaris/HPUX?

Я обнаружил еще одну проблему в усилиях, которые мы прилагаем для переноса нескольких сотен сценариев ksh из AIX, Solaris и HPUX в Linux. См. здесь для предыдущей задачи.

Этот код:

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

Опять же, мой вопрос:

  • Есть ли переменная среды, которая приведет к pdksh, чтобы вести себя как ksh93? В противном случае:
  • Есть ли опция pdksh для получения требуемого поведения?
0
добавлено отредактировано
Просмотры: 16

4 ответы

Ну, через год, похоже, нет решения моей проблемы.

Я добавляю этот ответ, чтобы сказать, что мне придется жить с ним ......

0
добавлено

Вы понимаете, что [является псевдонимом (часто ссылкой, символическим или жестким) для /usr/bin/test , правильно? Так что, возможно, актуальной проблемой являются разные версии /usr/bin/test ?

OTOH, ksh переопределяет его встроенным. Может быть, есть способ заставить его не делать этого? или, возможно, вы можете явно псевдоним [to /usr/bin/test , если /usr/bin/test на всех платформах совместим?

0
добавлено
[является встроенной командой в ksh93 и pdksh ..
добавлено автор Andrew Stein, источник

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 по-прежнему упоминается во многих документах с требованиями к установке от поставщиков программного обеспечения. Мы заменили pdksh на все наши Linux-системы на ksh93 без каких-либо проблем.

0
добавлено

в Bash test - операция выполняется для одного файла.

Я предполагаю, что в Ksh88 test -a работает для одного файла, но не жалуется, потому что другие тестовые слова являются неопределенным условием для -a.

вы хотите что-то вроде

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

Могу сказать, что ksh93 работает так же, как bash в этом отношении. К сожалению, я думаю, что код написан плохо, мое мнение и, вероятно, плохое мнение, поскольку основной причиной проблемы является встроенный тест ksh88, позволяющий использовать неаккуратный код.

0
добавлено