Вы не описываете, получаете ли вы другие результаты из ls
части скрипта. Это имеет значение; Команда ls
наверняка способна изменить свое поведение в зависимости от среды, в которой она вызывается. Это важно, потому что Tcl выполняет подпроцессы (на Windows) напрямую , используя системный вызов CreateProcess()
, а не различные упакованные версии, которые используют Cygwin и git bash. Другие возможности заключаются в том, что вы запускаете скрипт в другом каталоге и т. Д.
Однако в целом мы ожидаем, что скрипт будет вести себя очень схожим образом при запуске через exec
или через open |… r
как они имеют общее ядро функциональности. Единственные различия связаны с тем, как ожидаются выходные данные и завершение.
Если вы создаете конвейер подпроцесса, по умолчанию вы не сможете узнать об ошибках из него, пока вы не close
трубопровод. exec
генерирует любые ошибки «немедленно», потому что он не возвращает управление вам, пока подпроцесс не завершится и все выходные данные не будут прочитаны.