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) выполнение, конвейер, перенаправление, подпроцесс Важный: Использовать человек команда ( % человек ), чтобы увидеть, как команда используется на вашем конкретном компьютере. Смотрите также
Ключевые слова




