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

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

конспект

Exec переключатели ? arg ? arg … ?

Описание

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

Если начальные аргументы exec начинаются с , то они рассматриваются как параметры командной строки и не являются частью спецификации конвейера. В настоящее время поддерживаются следующие параметры:

-keepnewline

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

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

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

|

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

| &

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

< имя_файла

Файл с именем fileName открывается и используется в качестве стандартного ввода для первой команды в конвейере.

<@ FILEID

FileId должен быть идентификатором для открытого файла, например, возвращаемого значения из предыдущего вызова open . Он используется в качестве стандартного ввода для первой команды в конвейере. FileId должен быть открыт для чтения.

<< значение

Значение передается первой команде в качестве стандартного ввода.

> имя_файла

Стандартный вывод последней команды перенаправляется в файл с именем fileName , перезаписывая предыдущее содержимое.

2> имя_файла

Стандартная ошибка всех команд в конвейере перенаправляется в файл с именем fileName , перезаписывая его предыдущее содержимое.

> & имя_файла

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

>> имя_файла

Стандартный вывод последней команды перенаправляется в файл с именем fileName , добавляя к нему, а не перезаписывая его.

2 >> имя_файла

Стандартная ошибка всех команд в конвейере перенаправляется в файл с именем fileName , добавляя к нему, а не перезаписывая его.

>> & имя_файла

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

> @ FILEID

FileId должен быть идентификатором для открытого файла, например, возвращаемого значения из предыдущего вызова open . Стандартный вывод последней команды перенаправляется в файл fileId , который должен быть открыт для записи.

2> @ FILEID

FileId должен быть идентификатором для открытого файла, например, возвращаемого значения из предыдущего вызова open . Стандартная ошибка всех команд в конвейере перенаправляется в файл fileId . Файл должен быть открыт для записи.

> & @ FILEID

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

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

Если последним символом сообщения о результате или ошибке является символ новой строки, то этот символ обычно удаляется из сообщения о результате или сообщении об ошибке. Это согласуется с другими возвращаемыми значениями Tcl, которые обычно не заканчиваются переводом строки. Однако, если указан -keepnewline , то завершающий символ новой строки сохраняется.

Если стандартный ввод не перенаправляется с помощью “ <'' или `` << '' или `` <@ '', тогда стандартный ввод для первой команды в конвейере берется из текущего стандартного ввода приложения.

Если последним arg является “ & ”, то конвейер будет выполняться в фоновом режиме. В этом случае команда exec вернет список, элементы которого являются идентификаторами процесса для всех подпроцессов в конвейере. Стандартный вывод последней команды в конвейере будет идти в стандартный вывод приложения, если он не был перенаправлен, а вывод ошибок всех команд в конвейере будет идти в стандартный файл ошибок приложения, если он не перенаправлен.

Первое слово в каждой команде берется как имя команды; На нем выполняется подстановка тильды, и если результат не содержит косых черт, то в каталогах в переменной среды PATH выполняется поиск исполняемого файла с заданным именем. Если имя содержит косую черту, оно должно ссылаться на исполняемый файл, доступный из текущего каталога. Никакое расширение “ glob ” или другие подобные оболочке замены не выполняются в аргументах команд.

Проблемы с переносимостью

Windows (все версии)

Чтение или запись в сокет с использованием нотации “ @ fileId ” не работает. При чтении из сокета 16-разрядное приложение DOS зависнет, а 32-разрядное приложение немедленно вернется с концом файла. Когда приложение любого типа записывает данные в сокет, вместо этого информация отправляется на консоль, если таковая имеется, или отбрасывается.

Текстовый виджет консоли Tk не предоставляет реальных стандартных возможностей ввода-вывода. Под Tk, при перенаправлении со стандартного ввода, все приложения увидят немедленный конец файла; информация, перенаправленная на стандартный вывод или стандартная ошибка, будет отброшена.

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

Кроме того, при вызове 16-разрядного приложения DOS или Windows 3.X все имена путей должны использовать краткий, загадочный формат пути (например, используя “ applba ~ 1.def ” вместо “ applbakery.default ”). ).

Две или более прямой или обратной косой черты в строке пути указывают на сетевой путь. Например, простая конкатенация корневого каталога c:/ с подкаталогом /windows/system даст c: // windows/system (две косые черты вместе), что относится к точке монтирования с именем system на компьютере с именем windows c:/ игнорируется), и не эквивалентен c:/windows/system , который описывает каталог на текущем компьютере. Команда file join должна использоваться для объединения компонентов пути.

Windows NT

При попытке выполнить приложение exec сначала ищет имя, которое было указано. Затем по порядку .com , .exe и .bat добавляются в конец указанного имени и выполняется поиск более длинного название. Если имя каталога не было указано как часть имени приложения, при поиске приложения автоматически ищутся следующие каталоги по порядку:

Каталог, из которого был загружен исполняемый файл Tcl.
Текущий каталог.
32-разрядный системный каталог Windows NT.
16-разрядный системный каталог Windows NT.
Домашний каталог Windows NT.
Каталоги перечислены в пути.

Чтобы выполнить встроенные команды оболочки, такие как dir и copy , вызывающая сторона должна добавить “ cmd.exe/c ” к желаемому команда.

Windows 95

При попытке выполнить приложение exec сначала ищет имя, которое было указано. Затем по порядку .com , .exe и .bat добавляются в конец указанного имени и выполняется поиск более длинного название. Если имя каталога не было указано как часть имени приложения, при поиске приложения автоматически ищутся следующие каталоги по порядку:

Каталог, из которого был загружен исполняемый файл Tcl.
Текущий каталог.
Системный каталог Windows 95.
Домашний каталог Windows 95.
Каталоги, указанные в пути.

Чтобы выполнить встроенные команды оболочки, такие как dir и copy , вызывающая сторона должна добавить “ command.com/c ” к желаемому команда.

Как только 16-разрядное приложение DOS прочитало стандартный ввод с консоли и затем завершило работу, все последующие 16-разрядные приложения DOS увидят, что стандартный ввод уже закрыт. 32-разрядные приложения не имеют этой проблемы и будут работать правильно, даже после того, как 16-разрядное приложение DOS решит, что стандартный ввод закрыт. В настоящее время нет известного решения этой ошибки.

Перенаправление между устройством NUL: и 16-разрядным приложением не всегда работает. При перенаправлении из NUL: некоторые приложения могут зависать, другие получат бесконечный поток байтов `0x01 ‘, а некоторые на самом деле правильно получат немедленный конец файла; кажется, что поведение зависит от того, что скомпилировано в самом приложении. При перенаправлении более 4K или около того в NUL: некоторые приложения будут зависать. Вышеуказанные проблемы не случаются с 32-разрядными приложениями.

Все 16-разрядные приложения DOS запускаются синхронно. Все стандартные входные данные из канала в 16-разрядное приложение DOS собираются во временный файл; другой конец канала должен быть закрыт до того, как 16-разрядное приложение DOS начнет выполняться. Весь стандартный вывод или ошибка из 16-битного приложения DOS в канал собираются во временные файлы; приложение должно завершиться, прежде чем временные файлы будут перенаправлены на следующую стадию конвейера. Это происходит из-за обхода ошибки Windows 95 в реализации каналов, и именно так стандартная оболочка Windows 95 DOS сама обрабатывает каналы.

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

Macintosh

Команда exec не реализована и не существует в Macintosh.

Unix

Команда exec полностью функциональна и работает, как описано.

Смотрите также

Ошибка (п), открытый (п)

Ключевые слова

выполнить, конвейер, перенаправление, подпроцесс

Используйте команду man (% man ), чтобы увидеть, как команда используется на вашем конкретном компьютере.

Оцените статью
Solutics.ru
Добавить комментарий