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

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
добавлено
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru