1

在一个 tcl 程序中,我试图执行一个使用 <

puts [exec "./program < inputfile"]

但是,这会产生错误

couldn't execute "./program < inputfile": no such file or directory

有没有办法在 tcl 中做到这一点?

4

2 回答 2

4

Tcl 可以自己处理重定向,所以你可以这样写:

puts [exec ./program <inputfile]

否则,它会尝试将整个内容解释为单个(有点奇怪)文件名;合法(在 Unix 上,而不是在 Windows 上),但不是你想要的。

或者,您可以通过系统外壳启动整个过程:

puts [exec /bin/sh -c "./program < inputfile"]

这行得通,但有很多警告。特别是,为 shell 引用东西是一个不平凡的问题,而且你不能移植到 Windows(通过命令行处理器运行东西的咒语有点不同)。您还使用了一个额外的进程,但这在实践中并不是一个大问题,除非您真的在扩展系统资源的限制。

好处是您可以在其中使用完整的 shell 语法,否则可以做一些非常尴尬的事情。它也更广为人知,所以我会向具有中等专业水平的用户展示一些东西。(新用户应该坚持使用罐头的东西;真正的专家可以编写一些 Tcl 脚本。)

于 2013-06-09T17:53:56.410 回答
2

我找到了答案,命令必须写成

puts [exec "./program" < inputfile]
于 2013-06-09T14:41:38.560 回答