相关疑难解决方法(0)

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

我参与了将包含数百个ksh脚本的系统从AIX,Solaris和HPUX移植到Linux的过程.我在ksh在两个系统上的行为方式遇到了以下不同之处:

#!/bin/ksh
flag=false
echo "a\nb" | while read x
do
    flag=true
done
echo "flag = ${flag}"
exit 0
Run Code Online (Sandbox Code Playgroud)

在AIX,Solaris和HPUX上,Linux上的输出为"flag = true",输出为"flag = false".

我的问题是:

  • 是否有一个环境变量,我可以设置为让Linux的ksh表现得像其他Os的'?失败了:
  • Linux的ksh上有选项可以获得所需的行为吗?失败了:
  • 是否有适用于Linux的ksh实现具有所需的行为?

其他说明:

  • 在AIX上,Solaris和HPUX ksh是ksh88的变体.
  • 在Linux上,ksh是公共域ksh(pdksh)
  • 在AIX上,Solaris和HPUX dtksh和ksh93(我安装它们)与ksh一致
  • 我可以访问的Windows NT系统:Cygwin和MKS NT,与Linux一致.
  • 在AIX,Solaris和Linux上,bash是一致的,给出了不正确的(从我的角度来看)"flag = false"的结果.

下表总结了系统问题:

uname -s       uname -r                   which ksh          ksh version                     flag =
========       ========                   =========          ===========                     ======
Linux          2.6.9-55.0.0.0.2.ELsmp     /bin/ksh           PD KSH v5.2.14 99/07/13.2       false
AIX            3                          /bin/ksh           Version M-11/16/88f             true    // AIX 5.3
                                          /bin/ksh93         Version M-12/28/93e             true
SunOS          5.8, 5.9 and …
Run Code Online (Sandbox Code Playgroud)

linux aix ksh solaris

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

aix ×1

ksh ×1

linux ×1

solaris ×1