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

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

我有很多系统调用的地方,所以在每个地方改变它们都不是很可行。 find一些全球性的设置或者其他东西真是太好了。

要在Solaris上获得POSIX环境,需要在PATH早期/usr/bin/bin之前将标准一致性目录( /usr/xpg6/bin ,在不同的Solaris版本中可能有所不同)。 在那里有一个符合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; 

或者用getconf强加一个标准的PATH (这足够奇怪的不在POSIX模块中):

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

在Stack Overflow上看到这个线程 。

一个可能有所帮助的想法:

您可以将/ bin / sh更新为以前工作的旧AIX服务器上的相同版本。 perl行为并没有改变,只是你的版本/ bin / sh

你可以这样使用shebang

 #!/bin/ksh 

在脚本的第一行添加/重新显示以上内容。 它使用/ bin / ksh来执行脚本。