Многие разработчики оболочек тратят много усилий на разработку портативного кода, избегая, например, Bashisms, и я задаюсь вопросом, насколько это увеличение усиливает действительно способствует соблюдению требований к программному обеспечению.Контрольный список: когда писать переносимый/POSIX-совместимый код оболочки?
Интересно, можно ли дать простой контрольный список условий, требующих портативного кода. Допустим
- , что использование оболочки вместо
$BETTER_LANGUAGE
на самом деле имеет смысл, - , что каждая оболочка имеет ту же версию на всех целевых системах (т.е. оболочки версия различия не являются частью переносимости),
- что читаемости/изменчивость не рассматривается на данный момент (переносимый код может быть легче читать/понимать, чем, например, новейшая функция Bash RegEx).
Это то, что пришло на мой взгляд, до сих пор:
- код на самом деле (или, возможно, в будущем) и намеренно выполнены в разных оболочках (например, потому что целевые платформы ограничены различными оболочками , или потому, что код, возможно, потребуется выполнить в более быстрой оболочке, например,
dash
) и предоставление различных реализаций не представляется возможным. - Кодекс является частью системы, которая должна быть переносному собой
- код является частью исходного пакета, который должен быть работоспособна на различных платформах
- Программное обеспечение распространяется в виде пакета для различных целевых систем и разработчик не хочет вводить зависимость от конкретной оболочки
Есть ли очевидные условия, о которых я не думал, или они могут быть выражены более широко? Соответствует ли соответствие POSIX другому контрольному списку, чем общая переносимость? Есть ли литература или другой источник, который вы бы рекомендовали?