IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  AIX и UNIX  >

Работа в командной оболочке Bash

Введение

developerWorks
На предыдущую страницуСтраница 6 из 10 На предыдущую страницу

Опции документа

Обсудить


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Управление заданиями в Bash

Одна из наиболее мощных возможностей Bash - это возможность помочь пользователю в управлении исполнением различных команд. На рисунке 1 показана базовая модель исполнения команд в UNIX. В этой модели каждая команда имеет стандартный механизм для обработки ввода-вывода:

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

Обычно STDIN - это клавиатура, с помощью которой передается информация команде (как это делается в строке приглашения Bash), а STDOUT и STDERR - это экран, на который выводятся результаты. Однако можно изменить этот механизм ввода-вывода, например, так, чтобы команда читала и записывала данные в файл.


Рисунок 1. Стандартное выполнение команды
Рисунок 1. Стандартное выполнение команды

Для изменения стандартного механизма ввода-вывода в Bash используются команды перенаправления, список которых представлен в таблице 4.



Таблица 4. Перенаправление ввода-вывода в Bash
ПоследовательностьОписание
command < file command < file перенаправляет STDIN на чтение из файла.
command > file command > file перенаправляет STDOUT на запись в файл.
command >> file command >> file перенаправляет STDOUT на дозапись в файл.
command 2> file command 2> file перенаправляет STDERR на запись в файл..
command1 | command2 command1 | command2 connects STDOUT подсоединяет STDOUT команды command1 к STDIN команды command2.

Последний пункт в таблице 4 известен как конвейер и используется для объединения команд. Объединение команд с помощью конвейера - это ключевая техника программирования в командной оболочке UNIX, использующаяся, как продемонстрировано на рисунке 2. В этой модели каждая команда выполняет одну простую задачу и передает результат своей работы другой команде, которая также выполняет простую задачу, и так далее. Например, можно с помощью программы cat передать через конвейер содержимое файла команде grep, которая через конвейер передает все найденные строки команде wc, которая подсчитывает и выводит на экран количество строк в файле, содержащих заданную подстроку.


Рисунок 2. Объединение команд через конвейер
Рисунок 2. Объединение команд через конвейер



В начало


Асинхронное выполнение

Исполнение команд, которое описывалось выше, является синхронным, то есть в каждый момент времени выполняется только одна программа. Иногда команда или программа должна работать в течение долгого времени. Чтобы не отказываться от интерактивного использования, командной оболочки можно выполнять команды асинхронно. Для этого нужно дополнить команду знаком амперсанда (&). Это указывает командной оболочке запустить команду в фоновом режиме, что позволит продолжить работу в Bash. Листинг 5 демонстрирует эту и другие техники управления заданиями.


Листинг 5. Демонстрация управления заданиями в Bash
                    
rb$ grep paper.pdf /var/log/httpd/access.log | wc -l
5
rb$ python demo.py &    
[1] 20451
rb$ jobs
[1]+  Running                 python demo.py &
rb$ fg 1
python demo.py

Листинг 5 демонстрирует две различные техники управления заданиями. В первом примере команда grep ищет строку paper.pdf в лог-файле Web-сервера Apache Web. Результат работы этой команды передается через конвейер команде wc -l, которая считает количество строк. Таким образом, целиком команда подсчитывает число строк, содержащих paper.pdf в лог-файле.

Во втором примере программа на языке Python запускается в фоне для долговременной работы. Bash запускает это задание асинхронно в фоне и указывает идентификатор задания. Используя команду jobs, можно просмотреть список всех запущенных команд. В этом примере запущена только одна программа, она выводится из фоновой работы в синхронное выполнение с помощью команды fg. В этом руководстве было рассказано только об основных возможностях Bash по управлению заданиями. Чтобы стать мастером командной строки, необходимо более подробно изучить эту область.



В начало



На предыдущую страницуСтраница 6 из 10 На предыдущую страницу
    IBM в России Конфиденциальность Контакты