私は通常、スクリプトを 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 シェルは既にそこにある可能性があります。