Bash

將 shell Solaris ksh 遷移到 Red Hat

  • April 24, 2021

我們在 Solaris 11.3 伺服器上執行了數百個 shell 腳本。系統外殼是 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 特定的語法。

有沒有人有這個過程的經驗?

您的(內部)RedHat 系統管理員將能夠為您執行此操作。這是一個微不足道的操作,像這樣

yum install ksh

系統預設 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 的系統上,它可能是bash,,ksh甚至是dash。另一方面,如果您的腳本是可執行的並且在 中$PATH,並且您將其作為action(或者它是可執行的並且您使用/path/to/action)執行,那麼 shebang 行將生效並/bin/ksh用於執行腳本。

至於在沒有#!定義解釋器的指令的情況下執行腳本,它完全取決於您用來呼叫腳本的 shell。不建議。

引用自:https://unix.stackexchange.com/questions/646208