mit-scheme - 运行脚本并退出

时间:2014-07-13 06:23:51

标签: mit-scheme

我想从makefile评估一个脚本并退出,就像这样

mit-scheme --load "fact.scm"

但是,在评估文件后,它不会退出,并显示repl;如果我尝试(exit)原语,它会要求确认y / n。有可能解决这个问题吗?

4 个答案:

答案 0 :(得分:3)

对于Unix,mit-scheme通过重定向读取输入文件:

mit-scheme < /usr/cph/foo.in > /usr/cph/foo.out 2>&1 &

这取自文档http://www.gnu.org/software/mit-scheme/documentation/mit-scheme-user/Command_002dLine-Options.html#Command_002dLine-Options

答案 1 :(得分:3)

让我们的命令自动关闭mit方案进程的stdin,例如

echo | mit-scheme --load sample.scm

我们可以将它扩展为脚本函数;这是我不熟练的实施:

function mschm () {
   IFS=""
   for arg in $@
       do
           echo | mit-scheme --load $arg
       done
}

答案 2 :(得分:2)

您可以将--quiet参数添加到mit-scheme命令以禁止默认输出。这是Charlie Forthmount功能的一部分(虽然它只加载一个文件):

run-mit-scheme () 
{ 
    echo | mit-scheme --quiet --load $1;
    # Add an extra newline
    echo
}

答案 3 :(得分:1)

这有效;至少在 11.2 下,我在 (exit) 上没有收到任何确认提示:

scheme --quiet --load filename --eval '(exit)'

我有一个方便的shell函数,它提供了一种伪pythonic调用体验:没有参数,它会将我放入REPL,但如果有参数,第一个将作为脚本名称和任何后续参数变成(command-line-arguments)。这是定义;如所写,它在 bash 或 zsh 中工作,并通过将 scm() 更改为 function scm(或删除 local,但随后它草率地留下了在您的 shell 中定义的 $prog var ) 它也适用于 ksh:

scm() {
  if (( $# )); then
    local prog=$1
    shift
    scheme --quiet --load "$prog" --eval '(exit)' -- "$@"
  else
    scheme
  fi
 }