Книга: Искусство программирования на языке сценариев командной оболочки
33.1. Интерактивный и неинтерактивный режим работы
33.1. Интерактивный и неинтерактивный режим работы
В интеракивном режиме, оболочка читает команды, вводимые пользователем, с устройства tty. Кроме того, такая оболочка считывает конфигурационные файлы на запуске, выводит строку приглашения к вводу (prompt), и, по-умолчанию, разрешает управление заданиями. Пользователь имеет возможность взаимодействия с оболочкой.
Сценарий всегда запускается в неинтерактивном режиме. Но, не смотря на это, он сохраняет доступ к своему tty. И даже может эмулировать интерактивный режим работы.
#!/bin/bash
MY_PROMPT='$ '
while :
do
echo -n "$MY_PROMPT"
read line
eval "$line"
done
exit 0
# Этот сценарий, как иллюстрация к вышесказанному, предоставлен
# Stephane Chazelas (спасибо).
Будем считать интерактивным такой сценарий, который может принимать ввод от пользователя, обычно с помощью команды read (см. Пример 11-2). В "реальной жизни" все намного сложнее. Пока же, будем придерживаться предположения о том, что интерактивный сценарий ограничен рамками tty, с которого сценарий был запущен пользователемa, т.е консоль или окно xterm.
Сценарии начальной инициализации системы не являются интерактивными, поскольку они не предполагают вмешательство человека в процессе своей работы. Большая часть сценариев, выполняющих администрирование и обслуживание системы -- так же работают в неинтерактивном режиме. Многие задачи автоматизации труда администратора очень трудно представить себе без неинтерактивных сценариев.
Неинтерактивные сценарии прекрасно могут работать в фоне, в то время, как интерактивные -- подвисают, останавливаясь на операциях, ожидающих ввода пользователя. Сложности, возникающие с запуском интерактивных сценариев в фоновом режиме, могут быть преодолены с помощью expect-сценария или встроенного документа. В простейших случаях, можно организовать перенаправление ввода из файла в команду read(read variable <file). Эти приемы позволят создавать сценарии, которые смогут работать как в интерактивном, так и в неинтерактивном режимах.
Если внутри сценария необходимо проверить режим работы -- интерактивный или неинтерактивный, это можно сделать проверкой переменной окружения $PS1.
if [ -z $PS1 ] # интерактивный режим?
then
# неинтерактивный
...
else
# интерактивный
...
fi
Еще один способ -- проверка установки флага "i" в переменной $-.
case $- in
*i*) # интерактивный режим
*) # неинтерактивный режим
# (Из "UNIX F.A.Q.," 1993)
- 33.1. Интерактивный и неинтерактивный режим работы
- 33.2. Сценарии-обертки
- 33.3. Операции сравнения: Альтернативные решения
- 33.4. Рекурсия
- 33.5. "Цветные" сценарии
- 33.6. Оптимизация
- 33.7. Разные советы
- 33.8. Проблемы безопасности
- 33.9. Проблемы переносимости
- 33.10. Сценарии командной оболочки под Windows
- Режимы работы с таблицами
- Денис Колисниченко Самоучитель работы на компьютере Best in Russia
- Глава 2. Основы работы с iPad
- Глава 10 Основы работы в Интернете
- Часть 1 Основы работы на компьютере
- Глава 6 Разговор по душам. Техники для работы с чувствами и эмоциями
- Функции XPath для работы со строками
- Стратегия работы с клиентами и организационная среда
- 14.6. Добавление к ladsh возможностей работы с каталогами и универсализацией
- Резервное копирование при работе InterBase в режиме 24x7
- Типы данных для работы с датой и временем
- 8.5.3. Режимы энергосбережения