|
6
|
| Andrew Stein · 技术社区 · 17 年前 |
|
|
1
7
不要在linux上使用pdksh,而是使用来自kornshell.org的“真实”ksh。pdksh是ksh的盲目重新实现。kornshell.org是大约25年前的原始korn shell(由David korn撰写)。AIX和Solaris使用原始ksh的版本,因此kornshell.org版本通常具有完整的功能和错误。在接触了SunOS/Solaris之后,安装kornshell.org ksh通常是我在新的Linux机器上做的第一件事。.. |
|
|
2
3
在我公司的人提出一些建议后,我们决定对代码进行以下修改。无论是使用“真实”的ksh(ksh88、ksh93)还是任何ksh克隆(pdksh、MSK-ksh),这都会给我们带来相同的结果。这也适用于bash。
感谢jj33之前的回答。 |
|
|
3
1
我在本地Ubuntu Hardy系统上安装了“ksh”和“pdksh”。
ksh具有您所期望的“正确”行为,而pdksh则没有。您可以检查本地Linux发行版的软件存储库中的“真实”ksh,而不是使用pdksh。“真正的Unix”操作系统将安装AT&Korn shell的T版本,而不是pdksh,默认情况下,它们基于AT&T Unix(System V):-)。 |
|
|
4
1
你必须呆在ksh吗? 即使你使用相同的ksh,你仍然会调用各种外部命令(grep、ps、cat等),其中一部分在系统之间会有不同的参数和不同的输出。要么你必须考虑到这些差异,要么使用它们中每一个的GNU版本来使事情变得相同。 这个 Perl 编程语言最初正是为了克服这个问题而设计的。 它包括unix shell程序员希望从shell程序中获得的所有功能,但 在每个Unix系统上都是一样的。您可能没有所有这些的最新版本 系统,但如果你需要安装一些东西,也许最好安装perl。 |
|
|
5
1
差异的原因是内部块是在原始shell上下文中执行还是在子shell中执行。您可以使用()和{}分组命令来控制此操作。使用临时文件,就像您在更新中所做的那样,在大多数情况下都是有效的,但如果脚本快速运行两次,或者在不清除文件的情况下执行,等等,都会遇到问题。
这可能有助于解决您在Linux ksh上遇到的问题。如果您使用括号而不是大括号,您将在其他ksh实现上获得Linux行为。 |
|
|
6
0
这是回声“\n”问题的另一种解决方案 步骤:
PDKSH安装前的输出
PDKSH安装后 ============== 用法:开始
或
============== 用法:停止
或
|
|
|
7
0
我不知道有什么特别的选项可以强制ksh与特定的旧版本兼容。也就是说,也许你可以在你的linux机器上安装一个非常旧的ksh版本,并让它以兼容的方式运行? 在AIX/HP-UX机器上安装更现代版本的amyshell可能更容易,只需将脚本迁移到sh即可。我知道有适用于所有平台的bash版本。 |
|
|
8
0
当满足以下条件时,您的脚本会给出正确的(真)输出
|