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