シェルベースの「スイッチ」

シェルベースの「スイッチ」

私の考えでは源泉(つまり。呼ぶ)すべてのシェルのスクリプト(bash / cshが主なターゲットですが、Fish、zsh、ksh、およびrcも興味深いです)。

私はスクリプトが単一のファイルであることを望みました。つまり、各シェル方言のファイルではありません。

私はこれを行うことができますか?

私は次のことを考えています:

  if shell is bash then
    # bash code here
  else
    if shell is csh then
      # csh code here
    else
      if shell is xxxsh then
        # xxxsh code here
      fi
    endif
  fi

だから私はこれを行うことができます:

csh% source my_script
bash$ . my_script

問題は - もちろん、ifすべての方言が異なるため、すべてのシェルで動作する構文を使用する必要があるということです。

編集する

シェルを検出することが最初のステップです。実行時にスクリプトからシェルを決定するよかったです。

同様に重要なステップは、他のシェルを混同しないように、シェルの他の部分でコードを参照する方法です。考えてみましょう:<<here_documentbashでは許可されていますが、他のシェルでは違法なすべての組み合わせのすべての文字を他のシェルと混同せずにbashセクションにどのように含めることができますか?回答/リンクされた回答のどれもこれに対処しません。

ベストアンサー1

すべてのシェルに対してコードスニペットを作成しないでください。ほとんどのシェルで解釈できる移植可能なコードのみを記述する必要があります。あなたは少し見なければなりません。POSIX シェルコマンド言語。これは、シェル(POSIX以降)がコードを解釈する方法の標準です。

多くのシェル(たとえばbash)をPOSIXシェルのように実行するように設定できます。各シェルには独自の機能と特定のシンボルがあります。移植可能なスクリプトでは完全に使用しないでください。

おすすめ記事