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


16

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

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

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


пепел - полосатая форма удара
— Джо

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
У них может быть пепел занятых ящиков.
— Муру
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.