REDUX:如何克服Linux上的ksh与AIX / Solaris / HPUX上安装的ksh之间的不兼容性?

时间:2008-09-18 19:39:46

标签: linux solaris ksh aix hp-ux

我发现了另外一个问题,我们正努力将数百个ksh脚本从AIX,Solaris和HPUX移植到Linux。有关上一个问题,请参阅here

此代码:

#!/bin/ksh
if [ -a k* ]; then
    echo "Oh yeah!"
else
    echo "No way!"
fi
exit 0

(当在一个名为k的几个文件的目录中运行时)产生“哦是啊!”当使用AT& T ksh变体(ksh88和ksh93)调用时。另一方面,它产生和错误消息后跟“没办法!”关于其他ksh变种(pdksh,MKS ksh和bash)。

同样,我的问题是:

  • 是否有一个环境变量会导致pdksh表现得像ksh93?失败了:
  • pdksh上是否有选项可以获得所需的行为?

4 个答案:

答案 0 :(得分:5)

我不再在Linux上使用pdksh了。 由于AT& T ksh已经成为OpenSource,因此可以从各种Linux发行版中获得软件包。例如。 RedHat Enterprise Linux和CentOS包含ksh93作为“ksh”RPM包。

软件供应商的许多安装要求文档中仍然提到了pdksh。我们用ksh93替换了所有Linux系统上的pdksh,到目前为止没有任何问题。

答案 1 :(得分:0)

你确实认识到[{1}}的[别名(通常是链接,象征性或硬性),对吧?那么实际问题可能是/usr/bin/test的不同版本?

OTOH,ksh用内置版覆盖它。也许有办法让它不这样做?或者,如果所有平台上的/usr/bin/test兼容,您可以明确别名[到/usr/bin/test吗?

答案 2 :(得分:0)

一年之后,我的问题似乎无法解决。

我添加这个答案,说我将不得不忍受......

答案 3 :(得分:0)

在Bash中,测试-a操作是针对单个文件的。

我猜测在Ksh88中测试-a操作是针对单个文件的,但不会抱怨,因为其他测试字是-a的未指定条件。

你想要像

这样的东西
for K in /etc/rc2.d/K* ; do test -a $K && echo heck-yea ; done

我可以说ksh93在这方面就像bash一样。 遗憾的是,我认为代码编写得很糟糕,我的意见,并且可能是一个不好的意见,因为问题的根本原因是ksh88内置测试允许草率代码。