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