bash - 如何从 tcl 脚本调用 bash 命令?

标签 bash exec tcl interactive

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/

相关文章:

bash - 如何使用变量来指示 bash 中的文件描述符?

linux - 递归地在子文件夹中添加新文件

list - 如何从 tcl 中的列表中删除列表

perl - 每当文本小部件中的光标位置发生变化时自动调用子程序

linux - 如何处理所有错误消息,即使命令不起作用?

bash - 文件中行数的变量

go - 执行 psql 命令时 os/exec 上的输出不完整

c - Tcl 扩展 : Understanding and using ClientData

linux - Zip -x 的行为不符合预期

bash - 未知速记标志 : 'd' in -d