Также стоит отметить, что некоторые (многие?) программы ведут себя по-разному, когда запускаются пользователем (т.е. в командной строке) и являются частью пакетного процесса/запуска из другого процесса. Фактическая разница заключается в том, есть ли терминал, подключенный к процессу.
Команда spawn, являющаяся частью расширения Expect для Tcl, настраивает все так, чтобы исполняемая программа считала себя запущенной пользователем, а затем добавляет функциональность, позволяющую программе tcl взаимодействовать с внешней программой удобным способом (т. е. сопоставление он выводится через регулярные выражения и разветвляется на эти совпадения). Вещи, запускаемые через спавн, запускаются асинхронно.
Команда exec — это основная команда Tcl, которая запускает другую программу и возвращает результат. Он не выполняет никаких сложных настроек, которые делает spawn, но может быть очень удобен для простого запуска программы и просмотра ее вывода (и кода возврата). Вещи, запускаемые exec, по умолчанию выполняются синхронно, но амперсанд в конце команды заставляет ее выполняться в фоновом режиме (так же, как традиционные сценарии оболочки).
Команда open, хотя обычно используется для чтения/записи файлов, также может использоваться для запуска внешних процессов. Ставя перед именем команды символ вертикальной черты (|), вы указываете ей запустить внешний процесс и получаете доступ к файловым дескрипторам для чтения и записи для взаимодействия с результирующим процессом. Это что-то среднее между exec и spawn, с гораздо большим взаимодействием с доступным процессом, но без сложной настройки среды, которую делает spawn. Это может быть очень удобно для взаимодействия с программами, которые требуют ввода, но все еще достаточно хорошо настроены для автоматизации.
person
RHSeeger
schedule
13.04.2009