状況:複数のシェルで操作を実行するシェルスクリプトの作成
問題:Bourne互換シェルスクリプト(bash
、、、ksh
など)は簡単に移植可能ですが(スクリプトが互換性があり、他のBourne互換シェルで実行する必要があることを確認してください)、次のash
POSIX互換シェルスクリプトではありません。 。構文エラー(予想)が原因でこれらのシェルで実行されると、スクリプトはすぐに失敗します。zsh
sh
csh
fish
Q:個々のシェルのPOSIX互換性に関係なく、すべてのシェルで実行できるスクリプトを作成する方法はありますか?構文エラーを発生させ、スクリプト自体を終了せずにこれを行う方法は考えられません。
答え1
簡単: 書くただのための/bin/sh
。それは保証する(POSIXに従って、また伝統に従って)存在します。他のシェルは表面的に類似していても完全に異なる場合もあります。たとえば、確認してください。シェル、(薄い)フードの下のPerlシェル、またはスキームシェル、LISPish構文がよく使用されます。
Unixの利点の1つは、シェルが標準ユーザーレベルのプログラムであることです。しかし、これはすべてのハッカーが独自のクレイジーなバリエーションを作成できることを意味します。すべての殻の間にあいまいな交差点を作成しようとすると、失敗する運命です。すべての「共通シェル」について書くことは、「共通」が何を意味するかを定義することを意味します。これは誰かを怒らせるでしょう。