zsh
スクリプトを実行するのに十分なほどインストールされていると仮定できますか?
#!/usr/bin/env zsh
シェボンとして?
それとも、あまりにも多くのシステムでスクリプトを実行できなくなりますか?
説明:エンドユーザーが実行したいプログラム/スクリプト(Ubuntu、Debian、SUSE、Archなど)に興味があります。
ベストアンサー1
携帯性のためにそうではありません。zsh
少なくとも、Cygwinを介してすべてのUnixまたはUnixファミリ、またはWindowsでコンパイルすることができ、ほとんどのオープンソースUnixファミリと一部の商用ソース用にパッケージ化されていますが、通常はデフォルトのインストールには含まれません。
bash
もう一方の端は、bash
ほとんどの非組み込みLinuxシステムなどのGNUシステム(GNUプロジェクトのシェルなど)にインストールされ、時にはApple OS / Xなどの非GNUシステムにもインストールされます。商用Unixに関しては、Kornシェル(AT&Tのバリエーション、より多くのバージョンがありますksh88
)が標準であり、bash
どちらもzsh
選択パッケージにあります。 BSDで推奨される対話型シェルは通常、Almquistシェルにtcsh
基づいているか、オプションのパッケージとしてインストールする必要があります。sh
pdksh
bash
zsh
zsh
Apple OS/X にはデフォルトでインストールされます。それでもそこにいました/bin/sh
。 SysRescCD、Grml、Gobolinuxなど、いくつかのLinuxディストリビューションではデフォルトで見つけることができますが、主なディストリビューションはないと思います。
同様に、インストールbash
されているバージョンに問題があるだけでなく、利用可能な機能にも問題があります。たとえば、bash3
またはあるシステムはまれではありませんzsh3
。また、今作成するスクリプトが以前のバージョンとの互換性を維持しようとしてもzsh5
機能するという保証はありません。zsh6
bash
スクリプトの場合、私の意見はPOSIXシェル構文を使用することです。なぜなら、すべてのUnicesには、この構文を解釈することができる名前付きシェルsh
(必ずしもそうではないかもしれません)が少なくともあるからです。/bin
もしそうなら、携帯性を心配する必要はありません。その構文があなたのニーズに十分でない場合は、おそらくシェル以上が必要です。
その後、あなたのオプションは次のとおりです。
- Perlはどこにでもあります(以前のバージョンの機能セットに限定され、デフォルトでインストールされているPerlモジュールについては想定する必要はありません)
- 依存関係を持つパッケージごとに1つをビルドまたは指定して、インタプリタとそのバージョン(python 2.6以降、zsh 4以降、bash 4.2以降...)をスクリプトの依存関係として指定します。スクリプトに付属しているか、スクリプトの先頭にコメントとして含まれている追加情報ファイルまたは要求されたインタプリタの可用性を確認し、次の場合に明示的なエラーで解決するスクリプトの先頭にBourne構文の数行を追加します。そうでないときはそうです。このスクリプトには zsh 4.0 以上が必要です。。
- スクリプトと共にインタプリタを提供するということは(ライセンス問題を参照)、各ターゲットオペレーティングシステムのパッケージも提供する必要があることを意味します。一部のインタプリタは、スクリプトとそのインタプリタを単一の実行可能ファイルにパッケージ化する方法を提供し、それをより簡単にします。
- コンパイルされた言語で書いてください。繰り返しますが、ターゲットシステムごとに1つのパッケージです。