在一个 tcl 程序中,我试图执行一个使用 <
puts [exec "./program < inputfile"]
但是,这会产生错误
couldn't execute "./program < inputfile": no such file or directory
有没有办法在 tcl 中做到这一点?
在一个 tcl 程序中,我试图执行一个使用 <
puts [exec "./program < inputfile"]
但是,这会产生错误
couldn't execute "./program < inputfile": no such file or directory
有没有办法在 tcl 中做到这一点?
Tcl 可以自己处理重定向,所以你可以这样写:
puts [exec ./program <inputfile]
否则,它会尝试将整个内容解释为单个(有点奇怪)文件名;合法(在 Unix 上,而不是在 Windows 上),但不是你想要的。
或者,您可以通过系统外壳启动整个过程:
puts [exec /bin/sh -c "./program < inputfile"]
这行得通,但有很多警告。特别是,为 shell 引用东西是一个不平凡的问题,而且你不能移植到 Windows(通过命令行处理器运行东西的咒语有点不同)。您还使用了一个额外的进程,但这在实践中并不是一个大问题,除非您真的在扩展系统资源的限制。
好处是您可以在其中使用完整的 shell 语法,否则可以做一些非常尴尬的事情。它也更广为人知,所以我会向具有中等专业水平的用户展示一些东西。(新用户应该坚持使用罐头的东西;真正的专家可以编写一些 Tcl 脚本。)
我找到了答案,命令必须写成
puts [exec "./program" < inputfile]