将 shell Solaris ksh 迁移到 Red Hat

将 shell Solaris ksh 迁移到 Red Hat

我们有数百个 shell 脚本在 Solaris 11.3 服务器上运行。系统外壳是ksh93

$ ls -l /bin/sh
lrwxrwxrwx   1 root     root          13 Apr 12  2018 /bin/sh -> sparcv9/ksh93

所有剧本的#!/bin/ksh顶部都有“she-bang”。

服务器正在迁移到在 x86/64 上运行的 Red Hat Enterprise Linux,我了解系统 shell 是 bash,并且默认情况下在 RHEL 上未配置 ksh93。

我假设可以在 RHEL 上安装和配置 ksh93 来帮助解决这个问题?

某些脚本使用 ksh 特定语法。

有人对这个过程有经验吗?

答案1

您的(内部)RedHat 系统管理员将能够为您执行此操作。这是一个微不足道的操作,就像这样

yum install ksh

系统默认 shell 和用于运行脚本的 shell 不必相同。 shebang 行告诉您的系统使用哪个解释器(哪个 shell)来运行给定的脚本。

但请记住,仅仅因为您已经ksh安装了脚本,可能仍然无法工作。根据他们的工作和方式,他们可能需要安装额外的工具,或者您甚至可能需要完全重写它们以使用不同的工具。

如果您的组织还没有 RH 经验,那么我会问为什么您这么快就开始将应用程序迁移到 RH。没有一个基于 Linux 的发行版能够真正替代 Solaris。


评论中有一个后续问题,询问#!/bin/shSolaris 上的使用(其中sh符号链接到ksh93),并询问没有 shebang 的脚本会发生什么。

在第一种情况下,这取决于您运行脚本的方式。考虑一个名为 的脚本action。如果您运行sh action(或sh /path/to/action),则sh无论 shebang 行上有什么内容,您都将使用解释器。对于 Solaris,这是有效的ksh,但在基于 Linux 的系统上,它可能是bashksh,甚至dash。另一方面,如果您的脚本是可执行的并且在 中$PATH,并且您将其运行为action(或者它是可执行的并且您使用/path/to/action),则 shebang 行将生效并/bin/ksh用于执行脚本。

至于在没有#!定义解释器的指令的情况下运行脚本,它完全取决于您用来调用脚本的 shell。不建议。

相关内容