
移植可能なスクリプトを開発したいが、/bin/sh
私の環境/bin/sh
が/bin/bash
。私は(これまで)これらの拡張が移植可能ではないことを知っていますが、私が使用していた他の構文を常に使用できるわけではないことを知りませんでした。--posix
/bin/bash
[[
$()
bash
/bin/sh
私のスクリプトが-ismsを使用していないことをテストするために使用できる移植不能な設定を拒否する無料の実装はありますかbash
?
答え1
bosh
POSIXified Bourne Shellはどうですか?
まだいくつかの拡張機能がありますが、よく文書化されています。
http://schilytools.sourceforge.net/man/man1/bosh.1.html
それよりも少し速くてdash
少し遅いksh93
ので、2番目に速い殻です。
マルチバイト文字はdash
サポートされていないため、小規模の組み込みシステムにのみ役立ちます。
ところで:bosh
動作を細かく設定できます。 Solaris-10互換osh
リリースはから入手できますbosh
。Makefile
時間が経つと、Makefile
この目的のために事前設定を作成できるかどうかを確認することもできます。
更新:過去数日間、私は「bosh」の新しいコンパイルされたバリエーションを作成し、名前を「pbosh」にしました。これは、次のスケジュールされたschilytoolsスナップショットに含まれる予定で、2018年6月29日または7月2日にリリースされる可能性が高いです。
「pbosh」は、シェルスクリプトの移植性をテストするために設計されたシェルです。
POSIX の拡張機能は実装されていないため、POSIX 標準外でシェル機能を使用すると失敗します。
「pbosh」で使用されるスクリプトは、指定されていない一部のPOSIX機能によって他のシェルでまだ失敗する可能性があることに注意してください。一例は、パイプが生成される方法である。 「pbosh」は最適化方法を実装し、これがシェル組み込みの場合、シェルプロセス内のパイプで一番右のプログラムを実行します。したがって、「pbosh」で動作するすべてのパイプラインは「ksh93」でも動作しますが、「bash」ではまだ失敗する可能性があります。
スクリプトがSolaris 10のSVr4 Bourne Shellに移植可能であることを確認するには、「osh」というschilytoolsの他の「bosh」コンパイルバリアントとしても実行されることを確認することをお勧めします。これはSolaris 10 SVr5 Bourne Shellのポータブルバージョンです。
注:「pbosh」を半分にするために、永続的なエイリアスはデフォルトでは無効になりません。別のシェルを使用してスクリプトをテストしたり、Makefileを編集したり、次を使用して次の行をコメントアウトすることもできます。
CPPOPTS += -DDO_GLOBALALIASES # Include persistent aliases in ~/.globals
CPPOPTS += -DDO_LOCALALIASES # Include persistent aliases in .locals
その後、「make clean all」を呼び出して「pbosh」を再コンパイルし、永続的なエイリアスを無効にします。