Я отобразился CapsLock к ESC во всей системе. Когда я сделал это, Capslock шел.
Перезагрузка удалила постоянное состояние CapsLock. Это было отображено на ESC
Это не было действительно болезненно, но я чувствовал себя глупым, когда я понял то, что я сделал!
Wiki Greg имеет сообщение на адаптирующихся сценариях удара для Тире, который указывает на большое количество 'bashisms' - дополнительные функции, которые нестандартны, но являются частью удара. Предотвращение тех bashisms может помочь сделать Ваш сценарий более дружественным по отношению к различным средам. Это особенно отвечает на некоторые Ваши вопросы. Например, да, существуют операторы, которые отличаются (как ==
), но существует стандартный набор Posix, который должен работать во всех средах.
Для более полного чтения можно проверить стандарт Posix, которому должны соответствовать все оболочки. Особенно, объем на "Shell & Utilities".
Что я нахожу более сложными, чем различиями в оболочке являются различия в команде. Много систем Linux имеют GNU find
, но если Вы пишете портативный сценарий, не полагайтесь самостоятельно man find
, потому что существует много систем там с BSD find
, который имеет другой набор функций. Если Вы запишете сценарии для busybox, то Вы найдете, что существуют различные версии с совершенно различным nc
s. Это - виды вещей, которые всегда получают меня, когда я развертываю сценарий на различных средах.
Для дополнительного чтения на хороших методах сценариев оболочки на блоге David Pashley существует также хороший ресурс: Запись Устойчивых Сценариев оболочки Bash
Кроме того, удостоверьтесь, что Вы читаете ответы Gilles и комментарии к этому сайту. У него есть много подсказок о проверке, что Вы используете портативный код.
Запись сценария оболочки в определенной оболочке означает устанавливать ту оболочку. Единственный стандарт должен иметь csh
и sh
установленный по всем вариантам Unix. Так, если бы Вы хотели, чтобы Ваш сценарий работал на Солярисе, *BSD и GNU затем, то необходимо было бы записать это в, скажем, Оболочке Bourne.
Однако большинство команд Unix имеет различные синтаксисы при различных реализациях - смотрят на ps
в соответствии с Солярисом, FreeBSD и GNU - так в зависимости от того, какие инструменты Вы используете, Ваш сценарий не может быть портативным так или иначе. То, где оболочка установлена, будет иметь значение также. Это /bin/bash
/usr/bin/bash
, /usr/local/bin/bash
, или где-то в другом месте?
Я не знаю, что любые стандарты определяют оболочку. Взгляните на дистанционное управление или http://192.220.96.201/es/es-usenix-winter93.html`"> es для странных нестандартных оболочек. Однако они, кажется, все еще соответствуют некоторым общим идеям.