Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Замена процесса

Хотя они выглядят одинаково и оба могут использоваться для объединения потоков для перенаправления, существует важное различие между групповыми командами и подоболочками. В то время как групповая команда выполняет все свои команды в текущей оболочке, подоболочка (как следует из названия) выполняет свои команды в дочерней копии текущей оболочки. Это означает, что окружение копируется и передается новому экземпляру оболочки. При выходе из подоболочки копия среды теряется, поэтому любые изменения, внесенные в среду подоболочки (включая присвоение переменных), также теряются. Поэтому в большинстве случаев, если для сценария не требуется подоболочка, групповые команды предпочтительнее подоболочки. Групповые команды выполняются быстрее и требуют меньше памяти.

Мы видели пример проблемы среды подоболочки в главе 28, когда обнаружили, что читать команда в конвейере работает не так, как мы могли бы интуитивно ожидать. Напомним, если мы построим конвейер следующим образом:



эхо "фу" | читать эхо $ REPLY

эхо "фу" | читать эхо $ REPLY


Содержание оТВЕТИТЬ переменная всегда пуста, потому что читать команда выполняется в подоболочке, а ее копия оТВЕТИТЬ уничтожается при завершении подоболочки.

Поскольку команды в конвейерах всегда выполняются в подоболочках, любая команда, назначающая переменные, столкнется с этой проблемой. К счастью, оболочка обеспечивает экзотическую форму расширения, называемую процесс замены это можно использовать для решения этой проблемы.

Замещение процесса выражается двумя способами: Для процессов, производящих стандартный вывод:

<(список)

или для процессов, которые принимают стандартный ввод:

>(список)

в котором список это список команд.

Чтобы решить нашу проблему с читать, мы можем использовать замену процесса следующим образом:


читать <<(echo "foo") echo $ REPLY

читать <<(echo "foo") echo $ REPLY


Подстановка процесса позволяет нам обрабатывать вывод подоболочки как обычный файл с целью перенаправления. Фактически, поскольку это форма расширения, мы можем проверить его реальную ценность:



[я @ linuxbox ~] $ echo <(echo "foo")

/ dev / fd / 63

[я @ linuxbox ~] $ echo <(echo "foo")

/ dev / fd / 63


С помощью эхо чтобы просмотреть результат расширения, мы видим, что вывод подоболочки обеспечивается файлом с именем / dev / fd / 63.

Замена процесса часто используется с циклами, содержащими читать. Вот пример

цикл чтения, обрабатывающий содержимое списка каталогов, созданного подоболочкой:


#! / Bin / Баш


# pro-sub: демонстрация подстановки процесса


при чтении ссылок attr владелец группы размер дата время имя файла; do cat << - EOF

Имя файла: $ filename Размер: $ size

Владелец: $ owner

Группа: $ group Изменено: $ date $ time Links: $ links Атрибуты: $ attr


EOF

сделано <<(ls -l | tail -n +2)

#! / Bin / Баш


# pro-sub: демонстрация подстановки процесса


при чтении ссылок attr владелец группы размер дата время имя файла; do cat << - EOF

Имя файла: $ filename Размер: $ size

Владелец: $ owner

Группа: $ group Изменено: $ date $ time Links: $ links Атрибуты: $ attr


EOF

сделано <<(ls -l | tail -n +2)


Цикл выполняется читать для каждой строки списка каталогов. Сам листинг создается в последней строке скрипта. Эта строка перенаправляет вывод подстановки процесса на стандартный ввод цикла. В хвост Команда включена в конвейер подстановки процесса для удаления первой строки листинга, в которой нет необходимости.

При выполнении сценарий производит следующий вывод:



[я @ linuxbox ~] $ pro-sub | голова -n 20

Имя файла: address.ldif Размер: 14540

Владелец: я

Группа: я

Modified: 2009-04-02 11:12

[я @ linuxbox ~] $ pro-sub | голова -n 20

Имя файла: address.ldif Размер: 14540

Владелец: я

Группа: я

Modified: 2009-04-02 11:12


Ссылки:

1

Ссылки:


Атрибуты: -rw-r - r--


Имя файла: bin

Размер: 4096

Владелец: я

Группа: я

Modified: 2009-07-10 07:31

Ссылки: 2

Атрибуты: drwxr-xr-x


Имя файла: bookmarks.html Размер: 394213

Владелец: я

Группа: я

Атрибуты: -rw-r - r--


Имя файла: bin

Размер: 4096

Владелец: я

Группа: я

Modified: 2009-07-10 07:31

Ссылки: 2

Атрибуты: drwxr-xr-x


Имя файла: bookmarks.html Размер: 394213

Владелец: я

Группа: я


изображение

Лучшие облачные вычисления для ОС в OnWorks: