51

我想输入类似“scheme file.scm”之类的东西并让它解释文件,然后带我回到我的 shell,而不是在 REPL 中加载它。

编辑:我尝试了scheme < test.scm,它仍然使用REPL,唯一的区别是当流结束时scheme退出。

4

4 回答 4

45

scheme < file.scm应该可以工作(只要您不指定--interactive并且 stdin 不是终端,方案以非交互方式工作)。

于 2009-05-24T15:20:22.837 回答
17

要使用 MIT 方案运行方案程序:

scheme --quiet < program.scm

--quiet选项确保程序的输出是唯一显示的内容(即,根据您的要求,您不会看到 REPL)。

警告:如果您的程序提示用户使用输入过程(例如readread-charread-line等)进行输入,这将不起作用。这是因为 shell 输入重定向 ( <)(请参阅:相关问题)。不幸的是,当使用输入过程时,目前没有从命令行执行 MIT Scheme 脚本的正确方法。最好的选择可能是mit-scheme --quiet --load 'myscript',但是当脚本完成时您必须手动退出 MIT 方案。相关邮件列表线程:[MIT-Scheme-devel] 如何运行脚本并退出?

编辑:由于您可能会误输入<as >,从而导致源代码被覆盖,我建议将上述命令封装在 shell 脚本或 shell 函数中。例如:

runscheme () {
    scheme --quiet < "$1"
}

然后你就可以运行runscheme program.scm而不必担心你的源代码会被覆盖。(特别感谢Paul Rooney让我注意到这个潜在的错误)。

参考

scheme --help

--batch-mode, --quiet, --silent

抑制版本和版权的启动报告,以及告别。

这个命令行选项似乎被错误地从文档中的命令行选项列表中省略了,但我认为这是一个合法的命令行选项,因为scheme --help它显示了它,并且因为--batch-mode在参考手册的其他部分中使用(例如这里) .

于 2017-12-09T02:54:37.303 回答
7

我想你想要的是单片机。您可以像这样执行 .scm 脚本:

$ scm -f foo.scm arg1 arg2 arg3

有关详细信息,请参阅http://people.csail.mit.edu/jaffer/scm_3.html#SEC28 。

SCM 主页: http: //people.csail.mit.edu/jaffer/SCM

于 2011-04-13T09:21:23.930 回答
0

检查chez --help,然后我发现了这个(假设我使用的是 chez 方案):

chez --script ./temp.scm

另外,--verbose非常有用:

chez --verbose --script ./temp.scm
于 2017-12-21T19:57:31.103 回答