Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Linux: Введение
  3. Возможности командной оболочки

Настройка командного итерпретатора

Научившись (главным образом в результате чтения документации и непрестанных экспериментов) создавать работающие сценарии, Мефодий решил приступить к настройке командной оболочки, поскольку, как он слышал, для этого используются именно сценарии.

Привязка к клавишам

Оказалось, что настройка управляющих клавиш в bash не выглядит как сценарий, и даже имеет отношение не только к bash, а ко всем программам, использующим библиотеку терминального ввода readline. Конфирурационный файлreadline называется .inputrc и состоит, в основном, из команд вида "управляющая_последовательность": функция, где управляющая_последовательность — это символы, при получении которых readline выполнит функцию работы с вводимой строкой. Список всех функций readline можно узнать у bash по команде bind -l, а список всех привязок этих функций к клавиатурным последовательностям — по команде bind -p. Мефодий вписал в .inputrc такие две строки:

"\e[5~": backward-word
"\e[6~": forward-word

Пример 19. Настройка .inputrc

Упомянутые в примере функции позволяют перемещать курсор в командной строке по словам, а ESC-последовательности возвращаются, соответственно, клавишами Page Up и Page Down виртуальной консоли Linux (сочетание «e» означает в .inputrc клавишу ESC, то есть «^[», символ с ASCII-кодом 27).

К одной и той же функции readline можно привязать сколько угодно управляющих последовательностей: например, клавиша &home& делает то же, что и «^A», Стрелка вверх — то же, что и «^P», а Del — то же, что и «^D» (только не в пустой строке!). Этим отчасти решается проблема несовместимости управляющих последовательностей терминалов: если в каком-нибудь терминале другого типа Page Up или Page Down будут возвращать другие последовательности, Мефодий просто добавит в .inputrc ещё одну пару команд. Правда, Гуревич советовал вовсе отказаться от редактирования .inputrc, а воспользоваться утилитой tput, которая обращается к переменной TERM и базе данных по терминалам terminfo и готова выдать верную для любого данного терминала информацию по kpp (key previous page) и knp (key next page). Выдачу tput можно «скормить» той же bind, и получить команду, которая работает на любом терминале: bind ""`tput kpp`": backward-word" (кавычки, экранированные обратной косой чертой, ", передадутся bind в неизменном виде).

Стартовые сценарии

Настройка оболочки — это в первую очередь настройка окружения. В начале сеанса работы (при запуске стартового командного интерпретатора) выполняется с помощью команды «.» сценарий из файла со специальным именем — /etc/profile. Это — т. н. общесистемный профиль, стартовый сценарий, выполняющийся при входе в систему любого, кто использует командную оболочку, подобную sh. Следом выполняется персональный профиль (или просто профиль) пользователя, сценарий, находящийся в домашнем каталоге, и называющийся .profile. Этот сценарий пользователь может видоизменять, как ему заблагорассудится.

Что касается bash, то структура его стартовых файлов сложнее. Прежде всего, ~/.profile выполняется только если в домашнем каталоге нет файла .bash_profile или .bash_login, иначе стартовый сценарий берётся оттуда. В эти файлы можно помещать команды, несовместимые с другими версиями shell, например, управление сокращениями или привязку функций к клавишам. Кроме того, каждый интерактивный (взаимодействующий с пользователем), но не стартовый bash выполняет системный и персональный конфигурационные сценарии /etc/bashrc и ~/.bashrc. Чтобы стартовый bash также выполнял ~/.bashrc, соответствующую команду необходимо вписать в ~/.bash_profile. Далее, каждый неинтерактивный (запущенный для выполнения сценария) bash сверяется с переменной окружения BASH_ENV и, если в этой переменной записано имя существующего файла, выполняет команды оттуда. Наконец, при завершении стартового bash выполняются команды из файла ~/.bash_logout.

Пример настроек

Ниже приведены примеры конфигурационных файлов, которые Мефодий, сам или с помощью Гуревича, разместил в домашнем каталоге.

PS1="\u@\h:\w \$ "
EDITOR="/usr/bin/vim"
export PS1 EDITOR

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

 

Пример 20. Пример файла .bash_profile

В этом файле вызывается ~/.bashrc (если он существует).

# User specific aliases and functions
if [ -r ~/.alias ]; then
	. ~/.alias
fi

# Source global definitions
if [ -r /etc/bashrc ]; then
	. /etc/bashrc
fi

Пример 21. Пример файла .bashrc

Мефодий решил, что сокращения удобнее будет хранить в отдельном файле — ~/.alias. Кроме того, вызывается сценарий bashrc, который Мефодий обнаружил в каталоге /etc. Этот файл не входит в число автоматически выполняемых bash, поэтому его выполнение надо задавать явно.

alias > ~/.alias

Пример 22. Пример файла .bash_logout

Заметив, что команда alias выдаёт список сокращений в том же формате, в котором они и задаются, Мефодий придумал, как обойтись без редактирования файла ~/.alias. Отныне все сокращения, определённые к моменту завершения сеанса работы, будут записываться обратно в .alias. Туда попадут и те сокращения, что прочлись во время выполнения .bashrc, и те, что впоследствии были определены вручную.

alias l='ls -FAC'
alias ls='ls --color=auto'
alias pd='pushd'
alias pp='popd'
alias v='ls -ali'
alias vi='/usr/bin/vim'

Пример 23. Пример файла .alias

Последняя запись в файле .alias относится к инструменту, которым Мефодий создавал все эти файлы: текстовому редактору vim. О текстовых редакторах речь пойдёт в следующей лекции.

Перекрёстные ссылки книги для Настройка командного итерпретатора

  • Язык программирования sh
  • Вверх
  • Текстовые редакторы

Book navigation

  • Предисловие
  • Сеанс работы в Linux
  • Терминал и командная строка
  • Структура файловой системы
  • Работа с файловой системой
  • Доступ процессов к файлам и каталогам
  • Права доступа
  • Работа с текстовыми данными
  • Возможности командной оболочки
    • Редактирование ввода
    • Генерация имён файлов
    • Окружение
    • Язык программирования sh
    • Настройка командного итерпретатора
  • Текстовые редакторы
  • Этапы загрузки системы
  • Работа с внешними устройствами
  • Конфигурационные файлы
  • Управление пакетами
  • Сеть TCP/IP в Linux
  • Сетевые и серверные возможности
  • Графический интерфейс (X11)
  • Прикладные программы
  • Политика свободного лицензирования

Последние материалы

  • Приложение Zoom
    4 days ago
  • Команда restore
    2 weeks ago
  • Файл sudoers
    3 weeks 1 day ago
  • Утилита visudo
    3 weeks 2 days ago
  • Файловый менеджер Thunar
    1 month ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru