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

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

конспект

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

Описание

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

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

-keepnewline

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

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

Если арг (или пара арг) имеет одну из форм, описанных ниже, то он используется Exec управлять потоком ввода и вывода среди подпроцесса (ов). Такие аргументы не будут переданы подпроцессу (-ам). В таких формах, как «< fileName'' fileName may either be in a separate argument from ``<'' or in the same argument with no intervening space (i.e. ``

|

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

|

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

< fileName

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

<@ fileId

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

<< value

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

> имя_файла

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

2> имя_файла

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

> имя файла

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

>> имя_файла

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

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

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

>> имя файла

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

> @ FILEID

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

2> @ FILEID

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

> @ FILEID

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

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

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

Если стандартный ввод не перенаправлен с «<'' or ``<<'' or ``<@'' then the standard input for the first command in the pipeline is taken from the application's current standard input.

Если последним аргументом является « », то конвейер будет выполняться в фоновом режиме. В этом случае 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 сначала ищет имя, как оно было указано. Затем по порядку, .ком.EXE, а также .летучая мышь добавляются в конец указанного имени и ищет более длинное имя. Если имя каталога не было указано как часть имени приложения, при поиске приложения автоматически ищутся следующие каталоги по порядку:

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

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

Windows 95

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

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

Для того, чтобы выполнить встроенные команды оболочки, такие как реж а также копия, вызывающий должен предварять «command.com / c » к желаемой команде.

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

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

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

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

макинтош

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

Юникс

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

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

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

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

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

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

Ссылка на основную публикацию