将 shell Solaris ksh 迁移到 Red Hat

exh*_*ris 0 bash rhel solaris ksh shell-script

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

$ ls -l /bin/sh
lrwxrwxrwx   1 root     root          13 Apr 12  2018 /bin/sh -> sparcv9/ksh93
Run Code Online (Sandbox Code Playgroud)

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

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

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

一些脚本使用 ksh 特定的语法。

有没有人有这个过程的经验?

roa*_*ima 10

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

yum install ksh
Run Code Online (Sandbox Code Playgroud)

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

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

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


评论中有一个后续问题,询问#!/bin/sh在 Solaris 上的使用(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。不建议。