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

Main navigation

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

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

  1. Главная
  2. Slackware Linux
  3. Глава 8. Командный процессор (shell)

8.3. Bourne Again Shell (bash)

8.3.1. Переменные окружения

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

Поэтому в качестве механизма копирования у пользователей есть так называемое окружение. Окружение определяет условия, в которых выполняются программы, и некоторые из этих из этих определений являются переменными; пользователь может изменять их . Практически любой командный процессор имеет свои переменные окружения (в противном случае это скорее всего не слишком удобный шелл). Здесь мы дадим обзор команд bash'а, предназначенных для работы с его переменными окружения.

Запустив set без опций, вы увидите все определённые на данный момент переменные окружения вместе с их значениями. Как и большинство встроенных в bash команд set может выполнять много других вещей (с помощью параметров); однако вместо их рассмотрения мы сошлёмся на страницу руководства bash(1). В Прим. 8-1 показана часть вывода команды set, выполненной на компьютере автора. Обратите внимание в этом примере на переменную PATH, которую мы обсуждали ранее. Программы изо всех этих каталогов можно запускать, набирая просто их названия, не указывая полный путь к ним.

Пример 8-1. Вывод списка переменных окружения с помощью set

% set
PATH=/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
PIPESTATUS=([0]="0")
PPID=4978
PS1='\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/logan
QTDIR=/usr/local/lib/qt
REMOTEHOST=ninja.tdn
SHELL=/bin/bash
%unset ПЕРЕМЕННАЯ

Команда unset удаляет любые указанные вами переменные, уничтожая и саму переменную, и её значение. bash вообще забудет о том, что такая переменная существовала. (Не беспокойтесь. Если вы вы что-то и определили в этом сеансе шелла, это скорее всего будет переопределено в любом другом сеансе.)

%export ПЕРЕМЕННАЯ=значение

Команда export действительно очень удобна. С её помощью вы присваиваете переменной окружения ПЕРЕМЕННАЯ определённое “значение”. Если ПЕРЕМЕННАЯ не существует, она будет немедленно создана. Если ПЕРЕМЕННАЯ уже имеет какое-то значение, оно будет потеряно. Это нехорошо, если вы, например, хотите просто добавить каталог в свою переменную PATH. В этом случае вам надо выполнить что-то вроде этого:

%export PATH=$PATH:/путь/к/каталогу

Обратите внимание на использование $PATH: если вам нужно, чтобы bash интерпретировал переменную (т.е. использовал её значение), поставьте перед именем переменной знак $. Например, команда echo $PATH выведет на экран значение переменной PATH; в моём случае это выглядело так:

% echo $PATH
/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin

8.3.2. Завершение ввода табуляцией

(Здесь снова идёт какой-то вступительный текст.)

  1. В интерфейсе командной строки выполняется много ввода с клавиатуры.

  2. Ввод с клавиатуры - это работа.

  3. Никто не любит работать.

Из пунктов 3 и 2 следует, что (4) никто не любит осуществлять ввод с клавиатуры. К счастью bash избавляет нас нас от (5) пункта (никому не нравится интерфейс командной строки).

Вы спросите: “Каким образом bash предоставляет эту прекрасную возможность?” В дополнение к расширениям шаблонов подстановки, рассмотренным нами выше, bash обладает возможностью завершения ввода табуляцией (tab completion).

Завершение работает примерно так: вы набираете имя файла. Он может находиться в вашей переменной PATH, или вы можете набирать полный путь к нему. Всё, что вам нужно сделать - набрать достаточно полное имя файла, чтобы уникально идентифицировать его. Затем нажмите клавишу Tab. bash выяснит, что вам нужно и завершит ввод имени за вас!

Рассмотрим пример. К каталоге /usr/src находятся два подкаталога: /usr/src/linux и /usr/src/sendmail. Нам нужно увидеть, что находится в /usr/src/linux. Мы набираем только ls /usr/src/l, жмём TAB, и bash даёт нам полный путь ls /usr/src/linux.

Теперь представим, что существуют два каталога: /usr/src/linux и /usr/src/linux-old. Если мы наберём /usr/src/l и нажмём TAB, bash заполнит за нас столько, сколько сможет, и мы получим /usr/src/linux. На этом можно остановиться или нажать ещё раз TAB, при этом bash выведет список каталогов, которые соответствуют тому, что мы набрали ранее.

Отсюда следует, что можно обойтись меньшим вводом с клавиатуры (и, следовательно, людям может понравится интерфейс командной строки).

Перекрёстные ссылки книги для 8.3. Bourne Again Shell (bash)

  • 8.2. Командная строка
  • Вверх
  • 8.4. Виртуальные терминалы

Book navigation

  • Содержание
  • Предисловие
  • Глава 1. Введение в Slackware Linux
  • Глава 2. Получение поддержки и помощи
  • Глава 3. Установка
  • Глава 4. Настройка системы
  • Глава 5. Настройка сети
  • Глава 6. Настройка X
  • Глава 7. Загрузка
  • Глава 8. Командный процессор (shell)
    • 8.1. Пользователи
    • 8.2. Командная строка
    • 8.3. Bourne Again Shell (bash)
    • 8.4. Виртуальные терминалы
  • Глава 9. Структура файловой системы
  • Глава 10. Работа с файлами и каталогами
  • Глава 11. Управление процессами
  • Глава 12. Основы системного администрирования
  • Глава 13. Основные сетевые команды
  • Глава 14. Безопасность
  • Глава 15. Архивирование файлов
  • Глава 16. Редактор Vi
  • Глава 17. Редактор Emacs
  • Глава 18. Управление пакетами Slackware
  • Глава 19. ZipSlack
  • Глоссарий
  • Приложение A. The GNU General Public License

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

  • Файл sudoers
    17 hours ago
  • Утилита visudo
    2 days ago
  • Файловый менеджер Thunar
    1 week 4 days ago
  • Эмулятор терминала Terminator
    2 weeks 2 days ago
  • Приложение scanimage
    3 weeks 1 day ago
RSS feed

Secondary menu

  • О проекте

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