что делает команда exec

exec – Команда Linux – Команда Unix

exec – вызвать подпроцесс (ы)

конспект

Описание

Эта команда обрабатывает свои аргументы как спецификацию одного или нескольких подпроцессов для выполнения. Аргументы принимают форму стандартного конвейера оболочки, где каждый arg становится одним словом команды, а каждая отдельная команда становится подпроцессом.

-keepnewline

Сохраняет завершающий символ новой строки в выводе конвейера. Обычно завершающий символ новой строки будет удален.

Если arg (или пара arg ) имеет одну из форм, описанных ниже, то он используется exec для управления потоком ввод и вывод среди подпроцесса (ов). Такие аргументы не будут переданы подпроцессу (-ам). В таких формах, как “ имя_файла ”).

Отдельные команды в конвейере. Стандартный вывод предыдущей команды будет передан в стандартный ввод следующей команды.

Отдельные команды в конвейере. Как стандартный вывод, так и стандартная ошибка предыдущей команды будут переданы в стандартный ввод следующей команды. Эта форма перенаправления переопределяет формы, такие как 2> и> &.

Если стандартный вывод не был перенаправлен, то команда exec возвращает стандартный вывод последней команды в конвейере.Если какая-либо из команд в конвейере выйдет ненормально или будет убита или приостановлена, то exec вернет ошибку, и сообщение об ошибке будет содержать выходные данные конвейера, за которыми следуют сообщения об ошибках, описывающие ненормальные завершения; переменная errorCode будет содержать дополнительную информацию о последнем аварийном завершении. Если какая-либо из команд записывает в свой стандартный файл ошибок и эта стандартная ошибка не перенаправлена, то exec вернет ошибку; сообщение об ошибке будет содержать стандартный вывод конвейера, за которым следуют сообщения о ненормальных завершениях (если есть), за которыми следует стандартный вывод ошибок.

Если стандартный ввод не перенаправляется с помощью “

Источник

5.8. Команда exec

5.8. Команда exec

Команда exec заменяет текущий интерпретатор shell указанной командой. Обычно она используется для того, чтобы закрыть текущий интерпретатор и запустить другой. Но у нее есть и другое применение. Например, команда вида

Читайте также

9.1.4. Запуск новой программы: семейство exec()

9.1.4. Запуск новой программы: семейство exec() После запуска нового процесса (посредством fork()) следующим шагом является запуск в процессе другой программы. Имеется несколько функций, которые служат различным целям:#include /* POSIX */int execve(const char *filename, /* Системный вызов */char

9.1.4.4. Атрибуты, наследуемые exec()

9.1.4.4. Атрибуты, наследуемые exec() Как и в случае с fork(), после вызова программой exec сохраняется ряд атрибутов:• Все открытые файлы и открытые каталоги; см. раздел 4.4.1 «Понятие о дескрипторах файлов» и раздел 3.3.1 «Базовое чтение каталогов». (Сюда не входят файлы, помеченные для

9.4.3.1. Флаг close-on-exec

9.4.3.1. Флаг close-on-exec После вызова fork() и перед вызовом exec() следует убедиться, что новая программа наследует лишь те открытые файлы, которые ей нужны. Вы не захотите, чтобы порожденный процесс мешался в открытых файлах родителя, если только это так не задумано. С другой стороны,

10.9. Сигналы, передающиеся через fork() и exec()

10.9. Сигналы, передающиеся через fork() и exec() Когда программа вызывает fork(), ситуация с сигналами в порожденном процессе почти идентична ситуации в родительском процессе. Установленные обработчики остаются на месте, заблокированные сигналы остаются заблокированными и т.д.

4.7. Функции fork и exec

4.7. Функции fork и exec Прежде чем рассматривать создание параллельного сервера (что мы сделаем в следующем разделе), необходимо описать функцию Unix fork. Эта функция является единственным способом создания нового процесса в Unix.#include pid_t fork(void);Возвращает: 0 в дочернем

9.2.1.2 Функция exec в системе с замещением страниц

9.2.1.2 Функция exec в системе с замещением страниц Как уже говорилось в главе 7, когда процесс обращается к системной функции exec, ядро считывает из файловой системы в память указанный исполняемый файл. Однако в системе с замещением страниц по запросу исполняемый файл, имеющий

Exec (путь и название исполняемого файла)

Exec (путь и название исполняемого файла) Метод предназначен для выполнения команд и при своем вызове возвращает объект, с помощью которого можно управлять вызванной программой. Данный объект поддерживает следующие методы. ПРИМЕЧАНИЕ Выполнить команду можно также с

Команда

Команда Команда используется для выполнения SQL-запросов к базе данных Важно не путать команду, которая является СОМ-объектом, с текстом команды, который представляет собой строку. Обычно команды используют для описания данных, например для создания таблицы и

1.5. Действие команд fork, exec и exit на объекты IPC

1.5. Действие команд fork, exec и exit на объекты IPC Нам нужно достичь понимания действия функций fork, exec и _exit на различные формы IPC, которые мы обсуждаем (последняя из перечисленных функций вызывается функцией exit). Информация по этому вопросу сведена в табл. 1.4.Большинство функций

16.1. С помощью команды exec

Пример 16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec

Источник

Глава 11. Внутренние команды

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

Ввод/вывод

выводит (на stdout) выражение или содержимое переменной (см. Пример 4-1).

Команда echo может использоваться для передачи информации по конвейеру другим командам.

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

Кроме того, команда echo, в комбинации с подстановкой команд может учавствовать в операции присвоения значения переменной.

a=`echo «HELLO» | tr A-Z a-z`

Следует запомнить, что команда echo `command` удалит все символы перевода строки, которые будут выведены командой command.

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

Это встроенная команда Bash и имеет внешний аналог /bin/echo.

Это встроенная команда Bash. Имеет внешний аналог /bin/printf или /usr/bin/printf. За более подробной информацией обращайтесь к страницам справочного руководства man 1 printf по системным командам.

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

Старые версии Bash могут не поддерживать команду printf.

Пример 11-1. printf в действии

Пример 11-2. Ввод значений переменных с помощью read

Пример 11-3. Пример использования команды read без указания переменной для ввода

Пример 11-4. Ввод многострочного текста с помощью read

Пример 11-5. Обнаружение нажатия на курсорные клавиши

Команда read может считывать значения для переменных из файла, перенаправленного на stdin. Если файл содержит не одну строку, то переменной будет присвоена только первая строка. Если команде read будет передано несколько переменных, то первая строка файла будет разбита, по пробелам, на несколько подстрок, каждая из которых будет записана в свою переменную. Будьте осторожны!

Пример 11-6. Чтение командой read из файла через перенаправление

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

Передача информации, выводимой командой echo, по конвейеру команде read, будет вызывать ошибку.

Тем не менее, передача данных по конвейеру от cat, кажется срабатывает.

Файловая система

Уже знакомая нам команда cd, изменяющая текущий каталог, может быть использована в случаях, когда некоторую команду необходимо запустить только находясь в определенном каталоге.

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

Неожиданным образом выполняется команда cd, если ей передать, в качестве каталога назначения, два слэша.

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

Пример 11-7. Смена текущего каталога

Переменные

Команда let производит арифметические операции над переменными. В большинстве случаев, ее можно считать упрощенным вариантом команды expr.

Пример 11-8. Команда let, арифметические операции.

Транслирует список аргументов, из списка, в команды.

Пример 11-9. Демонстрация команды eval

Пример 11-10. Принудительное завершение сеанса

Пример 11-11. Шифрование по алгоритму «rot13»

Rory Winston представил следующий пример, как образец практического использования команды eval.

Пример 11-12. Замена имени переменной на ее значение, в исходном тексте программы на языке Perl, с помощью eval

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

Пример 11-13. Установка значений аргументов с помощью команды set

Вызов set без параметров просто выводит список инициализированных переменных окружения.

Пример 11-14. Изменение значений позиционных параметров (аргументов)

Пример 11-15. «Сброс» переменной

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

Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

Допускается объединение инициализации и экспорта переменной в одну инструкцию: export var1=xxx.

Однако, как заметил Greg Keraunen, в некоторых ситуациях такая комбинация может давать иной результат, нежели раздельная инициализация и экспорт.

Команды declare и typeset задают и/или накладывают ограничения на переменные.

что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec
что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

    Типичная конструкция цикла while с getopts несколько отличается от стандартной из-за отсутствия квадратных скобок, проверяющих условие продолжения цикла.

    Пример getopts, заменившей устаревшую, и не такую мощную, внешнюю команду getopt.

    Пример 11-17. Прием опций/аргументов, передаваемых сценарию, с помощью getopts

    Управление сценарием

    Пример 11-18. «Подключение» внешнего файла

    Файл data-file для Пример 11-18, представленного выше, должен находиться в том же каталоге.

    Сценарий может подключить даже самого себя, только этому едва ли можно найти какое либо практическое применение.

    Пример 11-19. Пример (бесполезный) сценария, который подключает себя самого.

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

    Если сценарий завершается командой exit без аргументов, то в качестве кода завершения сценария принимается код завершения последней выполненной команды, не считая самой команды exit.

    Это встроенная команда интерпретатора shell, заменяет текущий процесс новым процессом, запускаемым командой exec. Обычно, когда командный интерпретатор встречает эту команду, то он порождает дочерний процесс, чтобы исполнить команду. При использовании встроенной команды exec, оболочка не порождает еще один процесс, а заменяет текущий процесс другим. Для сценария это означает его завершение сразу после исполнения команды exec. По этой причине, если вам встретится exec в сценарии, то, скорее всего это будет последняя команда в сценарии.

    Пример 11-20. Команда exec

    Пример 11-21. Сценарий, который запускает себя самого

    Команда exec так же может использоваться для перенаправления. Так, команда exec stdin) файлом zzz-file (см. Пример 16-1).

    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

    Эта команда позволяет изменять ключи (опции) оболочки на лету (см. Пример 23-1 и Пример 23-2). Ее часто можно встретить в стартовых файлах, но может использоваться и в обычных сценариях. Требует Bash версии 2 или выше.

    Команды

    Возвращает код завершения, свидетельствующий о неудаче, и ничего более.

    11.1. Команды управления заданиями

    Выводит список заданий, исполняющихся в фоне. Команда ps более информативна.

    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

    Задания и процессы легко спутать. Некоторые внутренние команды, такие как kill, disown и wait принимают в качестве параметра либо номер задания, либо номер процесса. Команды fg, bg и jobs принимают только номер задания.

    Удаляет задание из таблицы активных заданий командной оболочки.

    Команда fg переводит задание из фона на передний план. Команда bg перезапускает приостановленное задание в фоновом режиме. Если эти команды были вызваны без указания номера задания, то они воздействуют на текущее исполняющееся задание.

    Останавливает работу сценария до тех пор пока не будут завершены все фоновые задания или пока не будет завершено задание/процесс с указанным номером задания/PID процесса. Возвращает код завершения указанного задания/процесса.

    Вы можете использовать команду wait для предотвращения преждевременного завершения сценария до того, как завершит работу фоновое задание.

    Пример 11-22. Ожидание завершения процесса перед тем как продолжить работу

    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

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

    Разместив команду wait, после запуска фонового задания, можно предотвратить такое поведение сценария.

    Перенаправление вывода в файл или даже на устройство /dev/null также снимает эту проблему.

    Действует аналогично нажатию на комбинацию клавиш Control+— Z, за исключением того, что она приостанавливает работу командной оболочки.

    Завершает сеанс работы командной оболочки, можно указать необязательный код завершения.

    Выдает статистику исполнения команд в единицах системного времени, в следующем виде:

    Имеет весьма ограниченную сферу применения, так как сценарии крайне редко подвергаются профилированию.

    Принудительное завершение процесса путем передачи ему соответствующего сигнала (см. Пример 13-4).

    Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill

    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec
    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

    Таблица 11-1. Идентификация заданий

    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec
    НотацияОписание
    %NНомер задания [N]
    %SВызов (командная строка) задания, которая начинается со строки S
    %?SВызов (командная строка) задания, которая содержит строку S
    %%«текущее» задание (последнее задание приостановленное на переднем плане или запущенное в фоне)
    %+«текущее» задание (последнее задание приостановленное на переднем плане или запущенное в фоне)
    %-Последнее задание
    $!Последний фоновый процесс

    Примечания

    Как правило, исходные тексты подобных библиотек, на языке C, располагаются в каталоге /usr/share/doc/bash-. /functions.

    Источник

    Bash-скрипты, часть 4: ввод и вывод

    В прошлый раз, в третьей части этой серии материалов по bash-скриптам, мы говорили о параметрах командной строки и ключах. Наша сегодняшняя тема — ввод, вывод, и всё, что с этим связано.

    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

    что делает команда exec. Смотреть фото что делает команда exec. Смотреть картинку что делает команда exec. Картинка про что делает команда exec. Фото что делает команда exec

    Вы уже знакомы с двумя методами работы с тем, что выводят сценарии командной строки:

    Стандартные дескрипторы файлов

    Всё в Linux — это файлы, в том числе — ввод и вывод. Операционная система идентифицирует файлы с использованием дескрипторов.

    Каждому процессу позволено иметь до девяти открытых дескрипторов файлов. Оболочка bash резервирует первые три дескриптора с идентификаторами 0, 1 и 2. Вот что они означают.

    STDIN

    STDOUT

    Итак, у нас есть некий файл с данными, к которому мы можем добавить другие данные с помощью этой команды:

    Перенаправление вывода команды в файл

    После выполнения этой команды мы увидим сообщения об ошибках на экране.

    Попытка обращения к несуществующему файлу

    При попытке обращения к несуществующему файлу генерируется ошибка, но оболочка не перенаправила сообщения об ошибках в файл, выведя их на экран. Но мы-то хотели, чтобы сообщения об ошибках попали в файл. Что делать? Ответ прост — воспользоваться третьим стандартным дескриптором.

    STDERR

    Итак, предположим, что надо перенаправить сообщения об ошибках, скажем, в лог-файл, или куда-нибудь ещё, вместо того, чтобы выводить их на экран.

    ▍Перенаправление потока ошибок

    Как вы уже знаете, дескриптор файла STDERR — 2. Мы можем перенаправить ошибки, разместив этот дескриптор перед командой перенаправления:

    Перенаправление сообщения об ошибке в файл

    ▍Перенаправление потоков ошибок и вывода

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

    Перенаправление ошибок и стандартного вывода

    Перенаправление STDERR и STDOUT в один и тот же файл

    Перенаправление вывода в скриптах

    Существует два метода перенаправления вывода в сценариях командной строки:

    ▍Временное перенаправление вывода

    Если запустить скрипт, обе строки попадут на экран, так как, как вы уже знаете, по умолчанию ошибки выводятся туда же, куда и обычные данные.

    Запустим скрипт так, чтобы вывод STDERR попадал в файл.

    Как видно, теперь обычный вывод делается в консоль, а сообщения об ошибках попадают в файл.

    Сообщения об ошибках записываются в файл

    ▍Постоянное перенаправление вывода

    Если в скрипте нужно перенаправлять много выводимых на экран данных, добавлять соответствующую команду к каждому вызову echo неудобно. Вместо этого можно задать перенаправление вывода в определённый дескриптор на время выполнения скрипта, воспользовавшись командой exec :

    Перенаправление всего вывода в файл

    Команду exec можно использовать не только в начале скрипта, но и в других местах:

    Вот что получится после запуска скрипта и просмотра файлов, в которые мы перенаправляли вывод.

    Перенаправление вывода в разные файлы

    Освоив это, вы сможете перенаправлять вывод туда, куда нужно. Теперь поговорим о перенаправлении ввода.

    Перенаправление ввода в скриптах

    Для перенаправления ввода можно воспользоваться той же методикой, которую мы применяли для перенаправления вывода. Например, команда exec позволяет сделать источником данных для STDIN какой-нибудь файл:

    Вот что появится на экране после запуска скрипта.

    Некоторые администраторы Linux используют этот подход для чтения и последующей обработки лог-файлов.

    Создание собственного перенаправления вывода

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

    Назначить дескриптор для вывода данных можно, используя команду exec :

    Перенаправление вывода, используя собственный дескриптор

    Создание дескрипторов файлов для ввода данных

    Перенаправить ввод в скрипте можно точно так же, как и вывод. Сохраните STDIN в другом дескрипторе, прежде чем перенаправлять ввод данных.

    После окончания чтения файла можно восстановить STDIN и пользоваться им как обычно:

    Закрытие дескрипторов файлов

    После исполнения скрипта мы получим сообщение об ошибке.

    Попытка обращения к закрытому дескриптору файла

    Всё дело в том, что мы попытались обратиться к несуществующему дескриптору.

    Будьте внимательны, закрывая дескрипторы файлов в сценариях. Если вы отправляли данные в файл, потом закрыли дескриптор, потом — открыли снова, оболочка заменит существующий файл новым. То есть всё то, что было записано в этот файл ранее, будет утеряно.

    Получение сведений об открытых дескрипторах

    У этой команды есть множество ключей, рассмотрим самые важные.

    Вывод сведений об открытых дескрипторах

    Посмотрим на вызов команды lsof из скрипта, в котором открыты, в дополнение к стандартным, другие дескрипторы:

    Вот что получится, если этот скрипт запустить.

    Просмотр дескрипторов файлов, открытых скриптом

    Скрипт открыл два дескриптора для вывода ( 3 и 6 ) и один — для ввода ( 7 ). Тут же показаны и пути к файлам, использованных для настройки дескрипторов.

    Подавление вывода

    Вот, например, как подавить вывод сообщений об ошибках:

    Тот же подход используется, если, например, надо очистить файл, не удаляя его:

    Итоги

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

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

    Уважаемые читатели! В этом материале даны основы работы с потоками ввода, вывода и ошибок. Уверены, среди вас есть профессионалы, которые могут рассказать обо всём этом то, что приходит лишь с опытом. Если так — передаём слово вам.

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *