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

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

REDUX: How to overcome an incompatibility between the ksh on Linux vs. that installed on AIX/Solaris/HPUX?

在将数百个ksh脚本从AIX,Solaris和HPUX移植到Linux方面,我发现了另一个问题。请参阅此处,以解决先前的问题。

此代码:

1
2
3
4
5
6
7
#!/bin/ksh
if [ -a k* ]; then
    echo"Oh yeah!"
else
    echo"No way!"
fi
exit 0

(在带有多个名称以k开头的多个文件的目录中运行时)在调用时产生"哦,是的!"与AT


我不再在Linux上使用pdksh。自AT


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

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

您想要类似

1
for K in /etc/rc2.d/K* ; do test -a $K && echo heck-yea ; done

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


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

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


您确实意识到[是/usr/bin/test的别名(通常是符号链接或符号链接),对吗?因此,实际的问题可能是/usr/bin/test

OTOH的不同版本,ksh用内置函数覆盖了它。也许有办法让它不这样做?或者,如果所有平台上的/usr/bin/test兼容,您也可以显式地将别名[别名为/usr/bin/test


推荐阅读