Я перехожу с 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 для выполнения сценария.