Книга: Искусство программирования на языке сценариев командной оболочки
Пример 11-21. Сценарий, который запускает себя самого
Пример 11-21. Сценарий, который запускает себя самого
#!/bin/bash
# self-exec.sh
echo
echo "Эта строка в сценарии единственная, но она продолжает выводиться раз за разом."
echo "PID остался равным $$."
# Демонстрация того, что команда exec не порождает дочерний процесс.
echo "==================== Для завершения - нажмите Ctl-C ===================="
sleep 1
exec $0 # Запуск очередного экземпляра этого же сценария
#+ который замещает предыдущий.
echo "Эта строка никогда не будет выведена!" # Почему?
exit 0
Команда exec так же может использоваться для перенаправления. Так, команда exec <zzz-file заменит стандартное устройство ввода (stdin) файлом zzz-file (см. Пример 16-1).
shopt
Эта команда позволяет изменять ключи (опции) оболочки на лету (см. Пример 23-1 и Пример 23-2). Ее часто можно встретить в стартовых файлах, но может использоваться и в обычных сценариях. Требует Bash версии 2 или выше.
shopt -s cdspell
# Исправляет незначительные орфографические ошибки в именах каталогов в команде 'cd'
cd /hpme # Oops! Имелось ввиду '/home'.
pwd # /home
# Shell исправил опечатку.
Команды
true
Команда возвращает код завершения -- ноль, или успешное завершение, и ничего больше.
# Бесконечный цикл
while true # вместо ":"
do
operation-1
operation-2
...
operation-n
# Следует предусмотреть способ завершения цикла.
done
false
Возвращает код завершения, свидетельствующий о неудаче, и ничего более.
# Цикл, который никогда не будет исполнен
while false
do
# Следующий код не будет исполнен никогда.
operation-1
operation-2
...
operation-n
done
type [cmd]
Очень похожа на внешнюю команду which, type cmd выводит полный путь к "cmd". В отличие от which, type является внутренней командой Bash. С опцией -a не только различает ключевые слова и внутренние команды, но и определяет местоположение внешних команд с именами, идентичными внутренним.
bash$ type '['
[ is a shell builtin
bash$ type -a '['
[ is a shell builtin
[ is /usr/bin/[
hash [cmds]
Запоминает путь к заданной команде (в хэш-таблице командной оболочки), благодаря чему, при повторном обращении к ней, оболочка или сценарий уже не будет искать путь к команде в $PATH. При вызове команды hash без аргументов, просто выводит содержимое хэш-таблицы. С ключом -r -- очищает хэш-таблицу.
help
help COMMAND -- выводит краткую справку по использованию внутренней команды COMMAND. Аналог команды whatis, только для внутренних команд.
bash$ help exit
exit: exit [n]
Exit the shell with a status of N. If N is omitted, the exit status
is that of the last command executed.
- Пример 11-1. printf в действии
- Пример 11-2. Ввод значений переменных с помощью read
- Пример 11-3. Пример использования команды read без указания переменной для ввода
- Пример 11-4. Ввод многострочного текста с помощью read
- Пример 11-5. Обнаружение нажатия на курсорные клавиши
- Пример 11-6. Чтение командой read из файла через перенаправление
- Пример 11-7. Смена текущего каталога
- Пример 11-8. Команда let, арифметические операции.
- Пример 11-9. Демонстрация команды eval
- Пример 11-10. Принудительное завершение сеанса
- Пример 11-11. Шифрование по алгоритму "rot13"
- Пример 11-12. Замена имени переменной на ее значение, в исходном тексте программы на языке Perl, с помощью eval
- Пример 11-13. Установка значений аргументов с помощью команды set
- Пример 11-14. Изменение значений позиционных параметров (аргументов)
- Пример 11-15. "Сброс" переменной
- Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export
- Пример 11-17. Прием опций/аргументов, передаваемых сценарию, с помощью getopts
- Пример 11-18. "Подключение" внешнего файла
- Пример 11-19. Пример (бесполезный) сценария, который подключает себя самого.
- Пример 11-21. Сценарий, который запускает себя самого
- Пример 33-6. Сценарий (бесполезный), который вызывает себя сам
- Пример 11-9. Демонстрация команды eval
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Вкладывайте в себя деньги
- Пример 17-10. Блочный комментарий
- Примеры