Как избежать «BASH-измов» в скриптах оболочки


37

Существует ли инструмент, похожий на Perl :: Critic, который будет проверять ваши сценарии оболочки и выявлять недостатки, проблемы переносимости, использование нестандартных программ без откатов, использование устаревших программ и т. Д.?

Я понимаю, что set -o posixэто отключит использование не POSIX, но это не скажет мне вещей, которые я хочу знать, таких как массивы индексирования оболочки zsh, начинающиеся с 1, и bash, начиная с 0, и ash вообще не поддерживает массивы.

Ответы:


36

Есть чекбашизмы . В Debian он поставляется как часть инструментов сопровождения пакетов .

Проверьте свои сценарии под тире и шикарный . Оба имеют несколько не-POSIX-конструкций, но если ваш скрипт работает в обоих, он, вероятно, будет работать в большинстве мест. (С оговоркой, что сложно протестировать типичные сценарии оболочки, так как они имеют много угловых случаев.)

Если вы хотите, чтобы ваши сценарии были переносимы на встроенные платформы Linux, протестируйте их с BusyBox . Обратите внимание, что BusyBox может быть более или менее ограничен в зависимости от размера встроенной системы; вполне нормально иметь сценарии, которые полагаются на функцию, которой нет в некоторых установках BusyBox.

Обратите внимание, что непереносимость происходит не только от оболочки, но и от внешних утилит. OpenBSD и Solaris, как правило, имеют утилиты с функциями POSIX и не намного, поэтому они хороши для тестирования на переносимость.

Вы можете обратиться к спецификации POSIX и другим ресурсам, упомянутым в этой теме (особенно к руководству по autoconf ); но это документация, это не поможет, если вы используете функцию случайно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.