Назад | Перейти на главную страницу

Как заставить Perl использовать / bin / ksh вместо / bin / sh?

Я перехожу с AIX на Solaris 10, но версия /bin/sh там настолько старые, что наши скрипты не работают. Могу ли я каким-то образом заставить Perl выполнять команды через другую оболочку (в моем случае /bin/ksh)?

У меня МНОГО мест с системными вызовами, поэтому менять их везде не очень возможно. Было бы здорово найти какую-нибудь глобальную настройку или что-то в этом роде.

Чтобы получить среду POSIX на Solaris, вам необходимо поместить стандартный каталог соответствия (/usr/xpg6/bin, число может отличаться в разных версиях Solaris) на ранней стадии PATH, перед /usr/bin или /bin. Существует POSIX-совместимый sh там (это kshна самом деле), а некоторые утилиты реагируют по-разному в зависимости от $PATH даже если они представлены в одном исполняемом файле.

Либо жестко запрограммируйте каталоги:

my @xpg_dirs = glob('/usr/xpg[0-9]/bin /usr/xpg[0-9][0-9]/bin');
$ENV{PATH} = "$xpg_dirs[@xpg_dirs-1]:$ENV{PATH}" if @xpg_dirs;

или ввести стандарт PATH с участием getconf (чего, как ни странно, нет в POSIX модуль):

$ENV{PATH} = `getconf PATH`;
chomp($ENV{PATH});

Мысль, которая может помочь:

Можете ли вы обновить / bin / sh до той же версии, которая была на вашем старом сервере AIX, где они раньше работали. Поведение perl не изменилось, только ваша версия / bin / sh

Видеть эта тема о переполнении стека.

Вы можете использовать shebang вот так

#!/bin/ksh

добавить / заменить указанное выше в первой строке скрипта. Он использует / bin / ksh для выполнения сценария.