Являются ли сценарии dash, ash и sh совместимыми на 100%?

16

Я хотел знать, совместимы ли скрипты, написанные для dash, ash и sh, на 100%?

Существуют ли какие-либо дополнительные функции для разбивки, изменения или синтаксиса?

Из того, что я слышал, ясень является прямым потомком sh.

user1115057
источник
пепел - полосатая форма удара
Джо
4
Источник? Я не видел ничего, что говорило о том, что пепел связан с bash
user1115057
Почему бы людям просто не отправлять патчи на bash вместо того, чтобы создавать всевозможные оболочки, это меня все время пугает. Если вы действительно хотите знать, прочитайте руководство, напримерman ash
daisy
2
Правильно, это не потомок Баш. Было бы точнее сказать, что они являются потомками sh (оригинальная оболочка Bourne), но это также не совсем правильно.
Златко
Вы можете использовать утилиту, checkbashismsчтобы проверить, что ваш скрипт POSIX-совместимый.
Успешно

Ответы:

18

Короткий ответ - нет, они не совместимы на 100%.

Но большинство оболочек довольно близки к базовым, поэтому вы вряд ли столкнетесь с несоответствиями. На самом деле, большинство оболочек отличаются не сильно добавленным синтаксисом, а некоторыми дополнительными функциями, такими как завершение табуляции и тому подобное.

Кроме того, dashявляется своего рода потомком ash- или портом от BSD к Linux, если быть точным. И все они должны быть потомками или разными реализациями sh. На самом деле, shна большинстве систем просто символическая ссылка на bash, dashили что - то еще. Важным является соответствие POSIX - и когда вы пишете сценарии в соответствии со стандартами, у вас не возникнет проблем.

Разница между этими оболочками заключается в оптимизации и производительности. Тогда bashони менее функциональны , но являются вполне законными оболочками. Bash является многофункциональным для интерактивной работы, но, например, использует больше памяти.

Златко
источник
Но для использования скрипта они совместимы?
user1115057
А что касается соответствия POSIX, даже если я буду следовать этому стандарту, если сценарий написан для Bash, я не думаю, что он будет работать на любом sh или его потомке
user1115057
Они должны быть совместимы друг с другом, если вы не используете некоторые неясные функции. Но если вы используете скрипт bash, у вас могут возникнуть другие проблемы.
Златко
никогда не намеревался использовать bash с sh, ash или dash. Что это за неясная особенность?
user1115057
1
многие из новых функций bash являются дополнениями по сравнению с POSIX, поэтому, скорее всего, вы напишите непереносимый код, если будете их использовать. IIRC даже конструкция [[]] не в ш. Также имейте в виду, что если вы не пишете чистый сценарий оболочки, в игру вступают также различия в инструментах (разные версии sed, grep, awk ...).
lynxlynxlynx
1

Следует отметить, что в некоторых системах, в частности, в Debian, / bin / ash недоступен:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash
Стивен Пенни
источник
2
У них может быть пепел занятых ящиков.
Муру