编辑:我尝试了 scheme < test.scm,但它仍然使用REPL,唯一的区别是当流结束时scheme退出。
scheme < file.scm
应该可以工作(只要您没有指定--interactive
,并且标准输入不是终端,Scheme 就可以以非交互方式工作)。
使用MIT Scheme运行Scheme程序:
scheme --quiet < program.scm
--quiet
选项确保您程序的输出是唯一显示的内容(即,根据您的要求,您将看不到REPL)。
注意:如果您的程序使用输入过程(如read
、read-char
、read-line
等)提示用户进行输入,则此选项将不起作用。这是因为shell输入重定向(<
)(参见:相关问题)。不幸的是,当使用输入过程时,目前没有正确执行MIT Scheme脚本的方法。最好的选择可能是mit-scheme --quiet --load 'myscript'
,但当脚本完成时,您必须手动退出MIT Scheme。相关邮件列表线程:[MIT-Scheme-devel] How to run a script and exit?
编辑:由于您可能会将<
误输入为>
,导致源代码被覆盖,因此我建议将上述命令封装在shell脚本或shell函数中。例如:
runscheme () {
scheme --quiet < "$1"
}
接下来,您可以毫不担心地运行runscheme program.scm
,您的源代码不会被覆盖。(特别感谢Paul Rooney提醒我注意这个潜在的错误)。
scheme --help
:
--batch-mode, --quiet, --silent
抑制版本和版权的启动报告以及告别语。
这个命令行选项似乎被错误地省略了,在文档命令行选项列表中,但我认为这是一个合法的命令行选项,因为scheme --help
显示它,并且因为其他部分的参考手册中使用了--batch-mode
(例如此处)。
<
弄反了,否则你会覆盖自己的源代码,或者只有我这样做吗? - Paul Rooneyrunscheme () {
scheme --quiet < "$1"
}
- Flux$ scm -f foo.scm arg1 arg2 arg3
更多详细信息请参见http://people.csail.mit.edu/jaffer/scm_3.html#SEC28。
我查看了 chez --help
,然后发现了这个(假设我正在使用 chez scheme):
chez --script ./temp.scm
--verbose
非常有用:chez --verbose --script ./temp.scm