Bash 命令可从交互式 tclsh session 中获得。例如。在 tclsh session 中,您可以拥有
% ls
代替
$ exec ls
但是,您不能拥有直接调用 bash 命令的 tcl 脚本(即没有 exec
)。
如何让 tclsh 在解释 tcl 脚本文件时识别 bash 命令,就像在交互式 session 中一样?
我想有一些 tcl 包(或类似的东西)在启动交互式 session 时自动加载以支持直接调用 bash 命令。如何在 tcl 脚本文件中手动加载它?
最佳答案
如果您想在脚本中使用特定实用程序,请编写桥接程序:
proc ls args {
exec {*}[auto_execok ls] {*}$args
}
这甚至适用于大多数 shell 内置程序或 Windows(具有明显的适应性)。 (公平地说,您通常不想使用外部 ls
;内部 glob
命令通常就足够了,有时需要一些 file
子命令的额外帮助。)一些命令需要更多的工作(例如,重定向输入,使其来自终端,带有额外的 <@stdin
或 </dev/tty
;在某些平台上需要 stty
)但效果相当好。
但是,如果您要求的是任意执行外部程序而无需任何额外代码来标记它们是外部程序,那么这被认为是违背 Tcl 的精神的。问题是它使代码更难维护;你正在做一个昂贵的调用而不是使用内部(相对)便宜的东西并不明显。放入 exec
在那种情况下不是繁重的......
关于bash - 如何从 tcl 脚本调用 bash 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116903/