СОКРАЩЕНИЕ:Как преодолеть несовместимость между ksh в Linux икоторый установлен на AIX / Solaris / HPUX?

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

Вопрос

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

Этот код:

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

(при запуске в каталоге с несколькими файлами, имя которых начинается с k) выдает "О да!" при вызове с вариантами AT & T ksh (ksh88 и ksh93).С другой стороны, он выдает сообщение об ошибке, за которым следует "Ни в коем случае!" в других вариантах ksh (pdksh, MKS, ksh и bash).

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

  • Существует ли переменная окружения, которая заставит pdksh вести себя как ksh93?В противном случае это:
  • Есть ли в pdksh опция для получения требуемого поведения?
Это было полезно?

Решение 2

По прошествии года, кажется, что решения моей проблемы нет.

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

Другие советы

Я бы больше не стал использовать pdksh в Linux.Поскольку AT & T ksh стала с открытым исходным кодом, существуют пакеты, доступные из различных дистрибутивов Linux.Например.RedHat Enterprise Linux и CentOS включают ksh93 в качестве RPM-пакета "ksh".

pdksh по-прежнему упоминается во многих документах по требованиям к установке от поставщиков программного обеспечения.Пока что мы заменили pdksh во всех наших системах Linux на ksh93 без каких-либо проблем.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top