Чи на 100% сумісні сценарій dash, ash та sh?


16

Мені хотілося знати, чи сценарії, написані для тире, золи та ш, на 100% сумісні?

Чи є якісь додаткові функції для крапки чи попелу чи зміни синтаксису?

З того, що я чув, попіл є прямим нащадком ш.


попіл - смугаста форма башмака
Джо

4
Джерело? Я нічого не бачив, що говорило про те, що зола пов’язана з bash
user1115057

Чому б люди просто не посилали патчі на баш, а не створювали всілякі оболонки, що весь час буксує мене. Якщо ви дійсно хочете знати, прочитайте посібник, наприкладman ash
ромашка

2
Правильно, це не нащадок від баш. Точніше було б сказати, що вони нащадки від sh (оригінальна оболонка Борна), але це теж не зовсім коректно.
Златко

Ви можете скористатися утилітою, checkbashismsщоб перевірити, чи ваш скрипт сумісний з POSIX.
доношено успішно

Відповіді:


18

Коротка відповідь - ні, вони не на 100% сумісні.

Але більшість оболонок досить близькі до основних, тому ви рідко натикаєтесь на невідповідності. Насправді, більшість оболонок відрізняються не сильно за доданим синтаксисом, а за деякими додатковими функціями, такими як доповнення табуляції та подібне.

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

Різниця між цими оболонками полягає в оптимізації та продуктивності. Вони менш багаті на особливості bash, але вони є повністю законними оболонками. Bash багатий на можливості для інтерактивної роботи, але використовує більше пам'яті, наприклад.


Але для використання сценарію вони сумісні?
користувач1115057

А щодо відповідності POSIX, навіть якщо я дотримуюся цього стандарту, якщо сценарій написаний для Bash, я не думаю, що він буде працювати на будь-якому ш або його нащадку
user1115057

Вони повинні бути сумісні між собою, якщо ви не використовуєте деякі незрозумілі функції. Але якщо ви використовуєте скрипт bash, у вас можуть виникнути більше проблем.
Златко

ніколи не мав намір використовувати баш з ш, золи або тире. Які ті незрозумілі риси?
користувач1115057

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.