首页 / 知识
如何克服Linux上的ksh与AIX / Solaris / HPUX上安装的ksh之间的不兼容?
2023-04-16 01:21:00

How to overcome an incompatibility between the ksh on Linux vs. that installed on AIX/Solaris/HPUX?我参与了将包含数百个ksh脚本的系统从AIX,Solaris和HPUX移植到Linux的过程。我发现ksh在两个系统上的行为方式存在以下差异:
在AIX,Solaris和HPUX上,输出为" flag = true";在Linux上,输出为" flag = false"。 我的问题是:
其他说明:
下表总结了系统存在的问题:
更新资料 经过我公司人员的一些建议后,我们决定对代码进行以下修改。无论使用"真实的" ksh(ksh88,ksh93)还是任何ksh克隆(pdksh,MSK ksh),这都给我们相同的结果。这对于bash也可以正常使用。
感谢jj33先前接受的答案。 不要在Linux上使用pdksh,而要使用kornshell.org中的" real" ksh。 pdksh是ksh的盲目重新实现。 kornshell.org是原始的korn外壳,可追溯到25年左右(David Korn编写的外壳)。 AIX和Solaris使用的是原始ksh的版本,因此kornshell.org版本通常是功能完善且错误完整的。在使用SunOS / Solaris之后,安装kornshell.org ksh通常是在新的Linux机器上要做的第一件事... 经过我公司人员的一些建议后,我们决定对代码进行以下修改。无论使用"真实的" ksh(ksh88,ksh93)还是任何ksh克隆(pdksh,MSK ksh),这都给我们相同的结果。这对于bash也可以正常使用。
感谢jj33为先前接受的答案。 这是回显" n"问题的另一种解决方案 脚步:
卸载ksh 下载pdksh-5.2.14-37.el5_8.1.x86_64.rpm(请检查32位或64位操作系统并选择正确的pkg) 安装pdksh-5.2.14-37.el5_8.1.x86_64.rpm
安装PDKSH之前的输出
安装PDKSH之后 ============== 用法:START
要么
============== 用法:停止
要么
产生差异的原因是内部块是在原始Shell上下文中还是在子Shell中执行。您可以使用()和{}分组命令来控制它。就像您在更新中一样,使用临时文件在大多数情况下都可以使用,但是如果脚本快速运行两次,或者如果执行时没有清除文件,则将遇到问题。
这可能有助于解决您在Linux ksh上遇到的问题。如果使用括号而不是括号,则将在其他ksh实现中获得Linux行为。 我在本地Ubuntu Hardy系统上安装了" ksh"和" pdksh"。
ksh具有您期望的"正确"行为,而pdksh没有。您可以检查本地Linux发行版的软件存储库中的"真实" ksh,而不使用pdksh。默认情况下," Real Unix"操作系统将安装Korn shell的AT&T版本,而不是pdksh,它们基于AT&T Unix(System V):-)。 您必须待在ksh内吗? 即使您使用相同的ksh,您仍然会调用各种外部命令(grep,ps,cat等),其中的一部分将具有不同的参数以及系统之间的不同输出。您要么必须考虑这些差异,要么使用每个差异的GNU版本来使它们相同。
Perl编程语言最初是专门为克服此问题而设计的。
当 我不知道有什么特定的选项可以强制ksh与特定的较旧版本兼容。就是说,也许您可??以在Linux机器上安装非常旧的ksh版本,并且其行为是否兼容? 在AIX / HP-UX盒子上安装更新版本的amy shell可能会更容易,而只需迁移脚本以使用sh。我知道有适用于所有平台的bash版本。 |
最新内容
相关内容
linux系统查版本命令?
linux系统查版本命令?,系统,信息,名称,状态,设备,命令,软件,工具,版本,终端,linux下如何查看grub版本号1、首先连接上Linux主机,如图所示,使Linulinux的安装软件命令?
linux的安装软件命令?,软件,系统,名称,发行,官方网站,市场,官网,密码,网站,检测,在linux下如何装应用程序?需要什么命令啊)执行“make”命令进强大系统linux命令?
强大系统linux命令?,系统,工作,地址,信息,命令,管理,名称,位置,目录,控制台,linux操作系统教程:[2]linux命令选项command [options] [argumentlinux脚本命令教学?
linux脚本命令教学?,标准,数据,系统,脚本,代码,流程,官网,底部,命令,变量,linux怎么运行脚本1、首先要下载Ubuntu系统,在百度搜索Ubuntu,打开Ubulinux安装dbe命令?
linux安装dbe命令?,系统,电脑,通用,数据,环境,变动,在线,业务,信息,网站,LINUX更换显卡后,驱动如何更新?1、一般来说更新内核即可。不过显卡例退出linux系统命令?
退出linux系统命令?,系统,状态,工作,档案,命令,电脑,工具,基础,信息,时间,linux怎么关闭系统?shutdown shutdown命令用于关闭Linux系统。有些linux系统cmp命令?
linux系统cmp命令?,系统,工作,标准,信息,命令,一致,目录,指令,功能,文件,请问在LINUX中,内部命令和外部命令分别是什么?1、内部命令是指shelllinux系统命令行工具?
linux系统命令行工具?,工具,系统,工作,状态,命令,地方,标准,信息,环境,基础,Linux:Python编写Linux自定义命令工具state是命令执行结果的状态,rlinux系统刷新命令?
linux系统刷新命令?,系统,工具,情况,最新,单位,工作,管理,信息,软件,服务,Linux系统中进行磁盘管理的常用命令有哪些查看磁盘空间 -df df命令linux系统sed命令?
linux系统sed命令?,资料,系统,工作,跨行,代理,时间,简介,命令,文件,都会,Linux下sed命令使用全解析sed命令行格式为:sed [-nefri] ‘command’linux系统维护命令?
linux系统维护命令?,系统,工作,信息,策略,发展,网络,时间,情况,工具,服务,系统加固之Linux安全加固1、修改系统密码;查看系统是否已设定了正确Ulinux系统下载的命令?
linux系统下载的命令?,系统,工作,管理,工具,软件,网络,信息,命令,目录,文件,linux系统怎样下载迅雷的资源1、通过浏览器下载:点击左下角的符号,