Bashスクリプトの代わりにzshを使用することをお勧めしますか? [閉鎖]

Bashスクリプトの代わりにzshを使用することをお勧めしますか? [閉鎖]

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基づいているか、オプションのパッケージとしてインストールする必要があります。shpdkshbashzsh

zshApple OS/X にはデフォルトでインストールされます。それでもそこにいました/bin/sh。 SysRescCD、Grml、Gobolinuxなど、いくつかのLinuxディストリビューションではデフォルトで見つけることができますが、主なディストリビューションはないと思います。

同様に、インストールbashされているバージョンに問題があるだけでなく、利用可能な機能にも問題があります。たとえば、bash3またはあるシステムはまれではありませんzsh3。また、今作成するスクリプトが以前のバージョンとの互換性を維持しようとしてもzsh5機能するという保証はありません。zsh6bash

スクリプトの場合、私の意見はPOSIXシェル構文を使用することです。なぜなら、すべてのUnicesには、この構文を解釈することができる名前付きシェルsh(必ずしもそうではないかもしれません)が少なくともあるからです。/binもしそうなら、携帯性を心配する必要はありません。その構文があなたのニーズに十分でない場合は、おそらくシェル以上が必要です。

その後、あなたのオプションは次のとおりです。

  • Perlはどこにでもあります(以前のバージョンの機能セットに限定され、デフォルトでインストールされているPerlモジュールについては想定する必要はありません)
  • 依存関係を持つパッケージごとに1つをビルドまたは指定して、インタプリタとそのバージョン(python 2.6以降、zsh 4以降、bash 4.2以降...)をスクリプトの依存関係として指定します。スクリプトに付属しているか、スクリプトの先頭にコメントとして含まれている追加情報ファイルまたは要求されたインタプリタの可用性を確認し、次の場合に明示的なエラーで解決するスクリプトの先頭にBourne構文の数行を追加します。そうでないときはそうです。このスクリプトには zsh 4.0 以上が必要です。
  • スクリプトと共にインタプリタを提供するということは(ライセンス問題を参照)、各ターゲットオペレーティングシステムのパッケージも提供する必要があることを意味します。一部のインタプリタは、スクリプトとそのインタプリタを単一の実行可能ファイルにパッケージ化する方法を提供し、それをより簡単にします。
  • コンパイルされた言語で書いてください。繰り返しますが、ターゲットシステムごとに1つのパッケージです。

おすすめ記事