如何强制 Perl 使用 /bin/ksh 而不是 /bin/sh?

如何强制 Perl 使用 /bin/ksh 而不是 /bin/sh?

我正在从 AIX 迁移到 Solaris 10,但版本/bin/sh太旧了,我们的脚本无法运行。我能否以某种方式强制 perl 通过不同的 shell(在我的情况下是/bin/ksh)在 `` 中执行命令?

我有很多地方有系统调用,所以在每个地方都更改它们不太可行。如果能找到一些全局设置或类似的东西就好了。

答案1

要在 Solaris 上获取 POSIX 环境,您需要将标准符合性目录 ( /usr/xpg6/bin,不同 Solaris 版本中的编号可能不同) 放在 的开头PATH/usr/bin或之前。那里/bin有一个符合 POSIX 的目录(实际上是 ),并且一些实用程序会根据 做出不同的反应,即使它们包含在单个可执行文件中。shksh$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;

或者强加一个标准PATHgetconf奇怪的是它不在POSIX模块中):

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

答案2

此主题在 Stack Overflow 上。

答案3

一个可能有帮助的想法:

您能否将 /bin/sh 更新为与旧 AIX 服务器上的版本相同,这些版本以前都运行在旧 AIX 服务器上。perl 行为没有改变,只是 /bin/sh 的版本发生了改变。

答案4

你可以像这样使用shebang

#!/bin/ksh

在脚本的第一行添加/替换上述内容。它使用 /bin/ksh 来执行脚本。

相关内容