Другие указали, что предпосылки вопроса о том, что оболочка Bourne Again используется по умолчанию и повсеместно используется, совершенно неверны.
В дополнение к этому, действительно есть веские причины для использования чего-то другого, кроме оболочки Bourne Again, для интерпретации сценариев оболочки. Эти причины побудили в течение ряда лет большой проект Ubuntu и Debian удалить bashisms и сделать так, чтобы как можно больше сценариев оболочки запускалось при инициализации системы (это было много сценариев оболочки с Системой 5 . ] rc
) и установка / удаление пакетов используют оболочку Debian Almquist вместо оболочки Bourne Again.
Проще говоря: оболочка Bourne Again, набитая интерактивными функциями, не является самым быстрым интерпретатором оболочки для POSIX-совместимого сценария оболочки. Так что, если можно сделать свои сценарии оболочки POSIX-совместимыми, интерпретируя их с помощью более легкой программы, такой как оболочка Debian Almquist, его система будет работать лучше. (В конце концов, Debian пришлось внести небольшие изменения в оболочку Almquist, чтобы добавить поддержку пары не-POSIX конструкций оболочки, которые были просто слишком глубоко и широко внедрены и слишком полезны, чтобы от них избавиться.)
Результат из всего этого был большой выигрыш в производительности начальной загрузки.
Итак, здесь необходимо рассмотреть два различных класса оболочек:
Обратите внимание, что выражение «предпочтение / bin / sh
» является чрезмерным упрощением. У Debian на самом деле было как минимум две цели:
Перед администраторами, использующими оболочку Debian Almquist, Z Shell (в режиме POSIX), оболочку Bourne Again (в режиме POSIX), MirBSD Korn shell и другие, такие как / bin / sh
, либо…
… делали скрипты максимально переносимыми, так что переключение того, что / bin / sh
было сопоставлено с didn ' т ломать вещи; или
… создание непереносимых сценариев явно нацелено на правильную программу интерпретатора , вместо того, чтобы просто ожидать, что / bin / sh
будет отображаться на нее.
Оболочка Debian Almquist была сделана отображением по умолчанию для / bin / sh
вместо Bourne Shell, так что те сценарии, которые были POSIX-совместимыми (или, точнее , Соответствует Руководству по политике Debian) выполнялась быстрее.
И, конечно, как только человек попадает в это, он может пойти намного дальше; например, рассмотрение компромиссов эффективности подобных / bin / true
и / usr / bin / clear
сценариев оболочки или скомпилированных программ. Но, к счастью, это выходит за рамки этого ответа. ☺
Все это, конечно, не ново и даже не специфично для Unix.Еще на рубеже веков я написал и опубликовал интерпретатор командной строки, который имел как «интерактивную», так и «неинтерактивную» разновидности, объясняя это самое разделение в своей документации и отмечая разницу между COMSPEC
и переменные среды OS2_SHELL
. Точно так же обсуждение удаления башизмов в Debian System V rc
и сценарии установки / удаления пакетов восходит к 1990-м годам.
/ bin / sh
. Вики Ubuntu. / bin / sh
. Вики Debian. Я кое-что понял: прослушивание необработанных нажатий клавиш возможно, даже когда фокус клавиатуры перехвачен экраном шкафчик. Недостатком является то, что при необработанных нажатиях клавиш вам нужно вручную отслеживать состояние клавиш-модификаторов, но, похоже, это работает довольно хорошо.
На основе этой идеи я создал небольшой демон горячих клавиш, который позволяет выполнять команды, даже когда экран заблокирован. Если кому интересно, можно найти здесь: https://github.com/tinloaf/lhkd
Если ваши медиа-клавиши посылают события ACPI, вы можете использовать acpid
, чтобы действовать в соответствии с ними.
К сожалению, это требует глобальных изменений конфигурации (а не для каждого пользователя), и может быть сложно передать события в приложения X11.
Вы можете увидеть, какие события ACPI, если таковые имеются, посылаются вашими мультимедийными клавишами, запустив acpi_listen
, а затем нажав эти клавиши. Например, вот что появляется в выводе acpi_listen
при нажатии клавиши "яркость вверх" на моем ноутбуке:
video/brightnessup BRTUP 00000086 00000000
Если ваши клавиши действительно посылают события ACPI, вы можете настроить acpid
на выполнение команды при их нажатии. Соответствующие файлы конфигурации обычно находятся в /etc/acpi/events/
. Они могут иметь любое имя, если находятся в нужном каталоге. Они выглядят следующим образом:
event=^video/brightness(up|down) .*[^K]$
action=/etc/acpi/backlight-handler.sh %e
Первая строка содержит event=
, за которой следует regex для поиска событий ACPI. Если событие соответствует regex, выполняется команда, указанная во второй строке (после action=
). Команда %e
расширяется до строки события. В данном случае она используется для передачи события в качестве аргументов командной строки сценария.
На Arch Wiki также есть хорошая статья о acpid
: https://wiki.archlinux.org/index.php/Acpid
Следующим шагом будет выяснение того, как управлять медиаплеером из сценария.