Как уже говорилось, bash
обычно доступен в установке по умолчанию для многих дистрибутивов. Ваш скрипт не достигнет наибольшей пользовательской базы, полагаясь на zsh
.
Важный вопрос, на который нужно ответить перед разработкой сценария: « Почему важно, в какой оболочке выполняется сценарий? »
Различные оболочки используют разный синтаксис или предлагают дополнительные функции оболочки, которые могут не поддерживаться другими оболочками. Чтобы написать сценарий для «общего мира конечных пользователей Linux», определите, использует ли ваш сценарий какой-либо синтаксис или функции оболочки, которые зависят от конкретной среды оболочки.
Например, bash
оболочка поддерживает определенные расширения, которые не поддерживаются dash
оболочкой Борна или чем-либо еще, на что /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
могут быть популярны, в то время как в других (банковский сектор) это практически неслыханно. Я думаю, вы должны дать гораздо больше информации, если вам нужен правильный совет по этому вопросу.