В Wiki Грега есть пост по адаптации bash-скриптов для Dash , в котором упоминается множество «bashisms» - дополнительных функций, которые не являются стандартными, но являются частью bash. Предотвращение этих ошибок может помочь сделать ваш сценарий более дружественным к различным средам. Это особенно отвечает на некоторые ваши вопросы. Например, да, есть операторы, которые отличаются (например ==
), но есть стандартный набор Posix, который должен работать во всех средах.
Для более подробного ознакомления вы можете ознакомиться со стандартом Posix , которому должны соответствовать все оболочки. В частности, том о «Shell & Utilities».
Что мне кажется более сложным, чем различия оболочек, так это различия команд. Многие системы Linux имеют GNU find
, но если вы пишете переносимый скрипт, не полагайтесь на свой собственный man find
, потому что существует множество систем с BSD find
, у которых есть другой набор функций. Если вы пишете сценарии для busybox, вы обнаружите, что есть разные версии с совершенно разными nc
s. Это те вещи, которые меня всегда привлекают, когда я развертываю скрипт в разных средах.
Для дополнительного чтения о хороших методах написания сценариев в оболочке, есть также хороший ресурс в блоге Дэвида Пашли: Написание надежных сценариев Bash Shell
Также обязательно прочитайте ответы и комментарии Жиля на этом сайте. У него много советов о том, чтобы убедиться, что вы используете переносимый код.