我们有数百个 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/sh
Solaris 上的使用(其中sh
符号链接到ksh93
),并询问没有 shebang 的脚本会发生什么。
在第一种情况下,这取决于您运行脚本的方式。考虑一个名为 的脚本action
。如果您运行sh action
(或sh /path/to/action
),则sh
无论 shebang 行上有什么内容,您都将使用解释器。对于 Solaris,这是有效的ksh
,但在基于 Linux 的系统上,它可能是bash
、ksh
,甚至dash
。另一方面,如果您的脚本是可执行的并且在 中$PATH
,并且您将其运行为action
(或者它是可执行的并且您使用/path/to/action
),则 shebang 行将生效并/bin/ksh
用于执行脚本。
至于在没有#!
定义解释器的指令的情况下运行脚本,它完全取决于您用来调用脚本的 shell。不建议。