Як зазначається, bash
зазвичай доступний в установці за замовчуванням для багатьох дистрибутивів. Ваш сценарій не досягне найвищої бази користувачів, покладаючись на zsh
.
Важливе питання, на який потрібно відповісти перед розробкою сценарію, - це " Чому важливо, в якій оболонці виконується сценарій? "
Різні оболонки використовують різний синтаксис або пропонують додаткові функції оболонки, які можуть не підтримуватися іншими оболонками. Щоб написати сценарій для "загального світу кінцевого користувача Linux", визначте, чи використовує ваш сценарій якісь функції синтаксису або оболонки, які покладаються на певне середовище оболонки.
Наприклад, bash
оболонка підтримує певні розширення, які не підтримуються dash
, оболонка Bourne або будь-яке інше, що /bin/sh
вказує на систему користувача.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
Спробуйте виконати echo {1..10}
в /bin/sh
порівнянні з, /bin/bash
і ви отримаєте дуже різний вихід.
Те саме стосується того, zsh
що, підтримуючи більшість bash
синтаксисів, пропонує додаткове розширення та синтаксис, який не підтримується bash
оболонкою. Дивіться цю таблицю, де порівнюються оболонки для конкретних прикладів.
Ви можете розширити свою потенційну базу користувачів за межами bash
, дотримуючись сценаріїв, які працюють при виклику #!/bin/sh -u
. Однак це породжує ще одне важливе запитання: " Що жертвують в обмін на більшу портативність? "
Визначте, чи варто вартувати жертви для відмінностей, пов'язаних із питаннями безпеки, функціональності, ефективності чи іншим, що ви вважаєте, що є пріоритетним для вашого сценарію. Ви можете не хотіти широкого використання сценарію з відомою вразливістю безпеки лише тому, що він працює в інших умовах.
Так багато сценаріїв написано, bash
що підтримка цих сценаріїв використовується як критерій при порівнянні командних оболонок . Багато інших людей зможуть запустити ваш скрипт, ніж якщо він покладається на zsh
будь-який інший синтаксис, виключно для середовища оболонки.
Також майте на увазі, що ви в кінцевому рахунку не маєте контролю над тим, як користувач виконує сценарій (також корисно для налагодження сценаріїв у різних оболонках ):
Пам’ятайте, що якщо ви використовуєте оболонку для читання скрипта оболонки ("sh scriptname"), замість того, щоб виконувати її безпосередньо ("./scriptname"), оболонка буде розглядати всі коментарі на початку сценарію оболонки як коментарі. Зокрема, коментар, який визначає інтерпретатора, який слід використовувати під час виконання сценарію ("#! / Bin / sh -u"), буде ігноруватися, як і всі параметри, перелічені поруч із цим перекладачем.
Отже, найкраще, що ви можете зробити для цього, - це зробити свої сценарії портативними, доки немає великих жертв у тому, як вони функціонують.
Можливо, ви також побачите конвенції кодування Bash - Переповнення стека .
zsh
можуть бути популярними, а в інших (банківський сектор) це практично не чутно. Я думаю, ви повинні дати набагато більше інформації, якщо вам потрібні відповідні поради щодо цього.