Являются ли сценарии 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.