Книга: Искусство программирования на языке сценариев командной оболочки

Пример 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).


Ключ -exec команды find -- это не то же самое, что встроенная команда exec.

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.

Оглавление книги

Оглавление статьи/книги

Генерация: 2.287. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз