2

シェルスクリプト(主にソフトウェア開発ユーティリティまたはビルドツール)を作成するときは常に、移植性のためにプレーンな古いshを使用することを優先して、bashの使用を避けようとしました。ただし、最近、便利な機能が利用できない、またはshが異なるシェルにエイリアスされているため、shを使用しているシステム間で動作の一貫性が実際に低いという問題が増えています...

私が理解しているように、shは最も古いUnixシェルであり、注意深く記述されたshスクリプトは、理論的にはほとんどすべてのシステムで実行されるはずです...しかし、すべての主要なシェルには約9000の異なるバリアントもあるようです。スクリプトインタープリターとしてbashを使用すると、スクリプトの移植性が効果的に制限されませんか?もちろん、OS XやほとんどのLinuxで問題はありませんが、BSDについてはどうでしょうか。Solaris、AIX、HP-UX?本当にすべてを実行したい場合はどうしますか?

bashは事実上すべてのOSにインストールできることを知っていますが、関連するすべての最新システムで本当に一級市民ですか?プリインストールされていますか?最も一貫性があり、ポータブルな全体的なエクスペリエンスを提供することを目的として、bashを回避するのが最善か、それとも採用するのが最善かはよくわかりません。

4

3 に答える 3

2

本当にすべてを実行したい場合はどうしますか?

あなたは(そしてあなたが呼んでいるツールの)POSIX標準shに従い、ターゲットOSもそうすることを望んでいます。「UNIX」と呼ばれる最新の製品はすべてこの標準に準拠する必要があり、通常(普遍的ではありませんが)、標準シェルはと呼ばれ/bin/shます。BSDおよびLinuxディストリビューションは、POSIX互換性も目指す傾向があります。

于 2012-06-19T06:32:41.767 に答える
2

スクリプトインタープリターとしてbashを使用すると、スクリプトの移植性が効果的に制限されませんか?

はい、しかしそれはあなたが指摘したようにあなたのターゲットオーディエンスに依存します。短いスクリプトの場合はdash、POSIXの互換性について(UbuntuとDebianのデフォルトシェル)でテストする価値があります。

シェルスクリプトで移植性の問題について考え始めるときはいつでも、別の言語に切り替えます。Perlは広く利用可能であり、一般的にスクリプトに適していますが、ツールをPython、Ruby、$ lang開発者が使用する場合は、$langを最大限に活用してください。

于 2012-06-19T06:39:01.433 に答える
0

bash自体は単なるCプログラムであり、実行するために特別な権限を必要とせず、任意の場所に配置できます。ソースから簡単に構築できます。基本的に、bashをインストールする必要があり、システムの管理者が必要ない場合は、bashを実行できます。

パス内にある限り、いつでもその行を使用してスクリプトをコーディングできます。

#!/usr/bin/env bash
于 2012-06-19T07:42:42.697 に答える