web-dev-qa-db-ja.com

シェルスクリプトでの「BASH-isms」の回避

シェルスクリプトを検査して欠陥、移植性の問題、フォールバックのない非標準プログラムの使用、減価償却済みプログラムの使用などを指摘する Perl :: Critic に類似したツールはありますか?

気付いた set -o posixはPOSIX以外の使用法を無効にしますが、1から始まるシェル配列のzshインデックス付け、0からのbash、およびashが配列をサポートしていないなど、知りたいことはわかりません。

37
amphetamachine

checkbashisms があります。 Debianでは、これは パッケージメンテナツール の一部として出荷されます。

ダッシュ および posh でスクリプトをテストします。どちらにもいくつかの非POSIX構成がありますが、スクリプトが両方で機能する場合、ほとんどの場所で機能する可能性があります。 (典型的なシェルスクリプトは、多くのコーナーケースを持つ傾向があるため、テストするのは難しいという警告があります。)

スクリプトを組み込みLinuxプラットフォームに移植できるようにする場合は、 BusyBox を使用してテストします。 BusyBoxは、組み込みシステムがどれだけ小さいかによって、多少制限されることに注意してください。一部のBusyBoxインストールにはない機能に依存するスクリプトがあるのはごく普通のことです。

移植性がないのはシェルだけからではなく、外部ユーティリティからのものであることに注意してください。 OpenBSDとSolarisは、POSIX機能を備えたユーティリティを備えている傾向があり、それほど多くはないため、移植性のテストに適しています。

POSIX仕様 、および このスレッド で言及されているその他のリソース(特に autoconfマニュアル );を参照する必要があります。しかし、それはドキュメントです。誤って機能を使用しても役に立ちません。