1

私は通常、スクリプトを bash で記述します。私は他の人にそれらをbashで実行するように言い#!/usr/bin/env bash、シバンラインとして使用します。

シェル スクリプトについて読んでいると、「バシズム」を使用しない「移植可能な」ソリューションの提案を含むコメントをよく見かけます。移植可能なシェル スクリプトは、任意の Bourne Shell 派生物で実行できるもののようです。bash、ksh、または csh。

私には、これは少し奇妙に思えます。スクリプトを実行するシェルがわからないのはなぜですか? 私の質問は次のとおりです。ポータブル シェル スクリプトの実際の用途は何ですか? bash の機能を使用したい場合は、単純に bash を使用してみませんか?

移植性が必要とされる一般的な状況があると思いますが、そうでなければなぜ頻繁に言及されるのでしょうか? おそらく特定の環境では、歴史的な理由から移植性が必要になるかもしれませんが (わかりません)、これらの環境が何であるかを知りたいと思っています。

前もって感謝します!

編集:

あなたの回答とコメントからの私の結論 (ありがとう!):

  • 新しい bash 機能は、すべての bash バージョンで使用できるとは限らず、一部のコンピューターには古いバージョンがインストールされているため、避ける必要がある場合があります。
  • インストーラー スクリプトは、管理していないコンピューターで実行できる必要があります。すべての Unix 系 OS にデフォルトで bash が付属しているわけではありません。それどころか、POSIX シェルはほぼ普遍的に利用できるため、bash よりも優れたリーチを提供します。
  • 1000 台のコンピューターでスクリプトを実行する必要があるかもしれませんが、どこにでも bash をインストールしたくない (またはインストールできない) 場合があります。POSIX シェルはおそらく利用可能です。
  • 好きなコンピューターに bash をインストールすることさえできないかもしれません。たとえば、これは、管理者権限の欠如、プラットフォーム用の bash パッケージの欠如、または「最低限の」コンピューターのようなリソースの欠如が原因である可能性があります。繰り返しますが、おそらく POSIX シェルが利用可能です。
  • 一部の環境では、たとえば System V スタイルの init スクリプトなど、シェルが POSIX シェル以上のものであると想定することはできません。(これは正しいです?)

結論: 好きな場所で常に bash を使用できるわけではありませんが、POSIX シェルは既にそこにある可能性があります。

4

2 に答える 2

4

スクリプトを実行するシェルがわからないのはなぜですか?

  • 不明なマシンで実行する必要があるインストーラー スクリプトを作成しています。
  • 複数の既知のシェルで動作する単一のスクリプトを作成しています。
  • のバージョンが異なっていても、すべてのbash機能が同じように動作するわけではありませんbash( compat31、、、、オプションを参照) compat32compat40compat41

bash使用のいくつかの一般的な例:

  • dashDebian および Ubuntu のシステム シェルです。
  • Mac OS X は引き続きbash4.x ではなく 3.2 で出荷されます
  • Solaris は、私が思うに、ksh
  • bashFreeBSD システムでは個別にインストールする必要があります。
于 2013-10-17T14:42:41.420 に答える
1

これは、Bourne シェルとの互換性自体のためであり、スクリプトは (Bourne と互換性のある) シェルのみを備えたベアボーン マシン、shまたは任意の(Bourne 互換) シェルを備えた他のマシンで実行できます。明らかに、これは完全かつ完全な互換性のためだけに行います。

于 2013-10-17T13:53:19.323 に答える