Если вы хотите, чтобы в ваших скриптах были доступны специальные утилиты, напишите процедуры моста:
proc ls args {
exec {*}[auto_execok ls] {*}$args
}
Это будет работать (с очевидной адаптацией) для большинства встроенных оболочек или в Windows,(Чтобы быть справедливым, вы обычно не хотите использовать внешнюю ls
; обычно внутренней glob
команды достаточно, иногда с дополнительной помощью некоторых подкоманд file
.) Некоторым командам требуется немного больше работы (например, перенаправление ввода, чтобы оно поступало с терминала, с дополнительными <@stdin
или </dev/tty
; это необходимо для stty
на некоторых платформах), но это работает достаточно хорошо.
Однако, если вы запрашиваете произвольное выполнение внешних программ без какого-либо дополнительного кода, чтобы отметить, что они являются внешними, это считается противоречащим идеалу Tcl.Проблема в том, что это делает код довольно сложным в обслуживании;не очевидно, что вы делаете дорогой вызов вместо того, чтобы использовать что-то (относительно) дешевое, внутреннее.Ввод exec
в этом случае не , что обременительно…