我正在从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来执行脚本。