我正在从 AIX 迁移到 Solaris 10,但版本/bin/sh
太旧了,我们的脚本无法运行。我能否以某种方式强制 perl 通过不同的 shell(在我的情况下是/bin/ksh
)在 `` 中执行命令?
我有很多地方有系统调用,所以在每个地方都更改它们不太可行。如果能找到一些全局设置或类似的东西就好了。
答案1
要在 Solaris 上获取 POSIX 环境,您需要将标准符合性目录 ( /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});
答案2
看此主题在 Stack Overflow 上。
答案3
一个可能有帮助的想法:
您能否将 /bin/sh 更新为与旧 AIX 服务器上的版本相同,这些版本以前都运行在旧 AIX 服务器上。perl 行为没有改变,只是 /bin/sh 的版本发生了改变。
答案4
你可以像这样使用shebang
#!/bin/ksh
在脚本的第一行添加/替换上述内容。它使用 /bin/ksh 来执行脚本。