Что оболочка не конкретна?

Я отобразился CapsLock к ESC во всей системе. Когда я сделал это, Capslock шел.

Перезагрузка удалила постоянное состояние CapsLock. Это было отображено на ESC

Это не было действительно болезненно, но я чувствовал себя глупым, когда я понял то, что я сделал!

9
12.09.2011, 13:37
2 ответа

Wiki Greg имеет сообщение на адаптирующихся сценариях удара для Тире, который указывает на большое количество 'bashisms' - дополнительные функции, которые нестандартны, но являются частью удара. Предотвращение тех bashisms может помочь сделать Ваш сценарий более дружественным по отношению к различным средам. Это особенно отвечает на некоторые Ваши вопросы. Например, да, существуют операторы, которые отличаются (как ==), но существует стандартный набор Posix, который должен работать во всех средах.

Для более полного чтения можно проверить стандарт Posix, которому должны соответствовать все оболочки. Особенно, объем на "Shell & Utilities".

Что я нахожу более сложными, чем различиями в оболочке являются различия в команде. Много систем Linux имеют GNU find, но если Вы пишете портативный сценарий, не полагайтесь самостоятельно man find, потому что существует много систем там с BSD find, который имеет другой набор функций. Если Вы запишете сценарии для busybox, то Вы найдете, что существуют различные версии с совершенно различным ncs. Это - виды вещей, которые всегда получают меня, когда я развертываю сценарий на различных средах.

Для дополнительного чтения на хороших методах сценариев оболочки на блоге David Pashley существует также хороший ресурс: Запись Устойчивых Сценариев оболочки Bash

Кроме того, удостоверьтесь, что Вы читаете ответы Gilles и комментарии к этому сайту. У него есть много подсказок о проверке, что Вы используете портативный код.

12
27.01.2020, 20:05

Запись сценария оболочки в определенной оболочке означает устанавливать ту оболочку. Единственный стандарт должен иметь 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 для странных нестандартных оболочек. Однако они, кажется, все еще соответствуют некоторым общим идеям.

5
27.01.2020, 20:05

Теги

Похожие вопросы