Skip to main content

Linux - команда Unix: exec

8.Linux для Начинающих - Команды: find, cut, sort, wc (Июнь 2026)

8.Linux для Начинающих - Команды: find, cut, sort, wc (Июнь 2026)
Anonim

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

конспект

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

Описание

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

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

-keepnewline

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

--

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

Если Arg (или пара Arg ) имеет одну из форм, описанных ниже, тогда она используетсяExec для управления потоком ввода и вывода среди подпроцессов (ов). Такие аргументы не будут переданы подпроцессу (es). В таких формах, как `` < имя файла '' имя файла может либо находиться в отдельном аргументе от `` <'', либо в том же аргументе без промежуточного пространства (т. е. `` < имя файла '').

|

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

|&

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

< имя файла

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

<@ FILEID

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

<< значение

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

> имя файла

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

2> имя файла

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

>& имя файла

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

>> имя файла

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

2>> имя файла

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

>>& имя файла

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

>@ FILEID

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

2>@ FILEID

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

>&@ FILEID

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

Если стандартный вывод не был перенаправлен,Exec команда возвращает стандартный вывод из последней команды в конвейере. Если какая-либо из команд в конвейере выходит из строя ненормально или убита или приостановлена, тогдаExec будет возвращать ошибку, и сообщение об ошибке будет включать вывод конвейера, за которым следует сообщение об ошибке, описывающее аномальные окончания;код ошибки переменная будет содержать дополнительную информацию о последнем аномальном завершении. Если какая-либо из команд записывает в стандартный файл ошибки и эта стандартная ошибка не перенаправляется, то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: / с подкаталогом/ Окна / системы дастC: // окна / системы (два слэша вместе), который ссылается на точку монтирования, называемуюсистема на машине, называемойокнаC: / игнорируется) и не эквивалентенC: / Windows / система, который описывает каталог на текущем компьютере.присоединиться к файлу команда должна использоваться для конкатенации компонентов пути.

Windows NT

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

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

Для выполнения команд встроенных оболочек, таких какреж а такжекопия, вызывающий должен добавить ``cmd.exe / c'' к желаемой команде.

Windows 95

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

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

Для выполнения команд встроенных оболочек, таких какреж а такжекопия, вызывающий должен добавить ``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 или даже повесить систему, если их собственное закрытое окно консоли недоступно для них.

макинтош

Exec команда не реализована и не существует под Macintosh.

Юникс

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

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

ошибка (n), open (n)

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

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

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