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 に移行されています。システムシェルはbashで、ksh93はRHELでデフォルトで設定されていないことがわかります。
この問題を解決するために、RHELにksh93をインストールして設定できるとしますか?
一部のスクリプトはksh関連の構文を使用します。
このコースに経験がある人はいますか?
答え1
あなたの(内部)RedHatシステム管理者はあなたのためにこれを行うことができます。こんな些細な作業ですね
yum install ksh
システムのデフォルトシェルとスクリプトの実行に使用されるシェルは同じである必要はありません。 shebang行は、与えられたスクリプトを実行するために使用するインタプリタ(任意のシェル)をシステムに通知します。
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
。一方、スクリプトが実行可能でinで$PATH
実行されている場合action
(または実行可能で使用されている場合/path/to/action
)、shebang行が適用され、/bin/ksh
スクリプトを実行するために使用されます。
インタプリタを定義するディレクティブなしでスクリプトを実行することは、#!
すべてスクリプトを呼び出すために使用するシェルによって異なります。お勧めできません。