8

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

mit-scheme --load "fact.scm"

但是,在它评估文件之后,它并没有退出,并且出现了 repl;如果我尝试(exit)原语,它会要求确认是/否。有可能解决这个问题吗?

4

4 回答 4

6

只需让我们的命令自动关闭 mit-scheme 进程的标准输入,例如

echo | mit-scheme --load sample.scm

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

function mschm () {
   IFS=""
   for arg in $@
       do
           echo | mit-scheme --load $arg
       done
}
于 2016-11-29T14:41:37.157 回答
4

对于 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

于 2014-07-13T17:57:04.803 回答
2

您可以将--quiet参数添加到mit-scheme命令以抑制默认输出。否则,这是 Charlie Forthmount 功能的一个婴儿床(尽管它只加载一个文件):

run-mit-scheme () 
{ 
    echo | mit-scheme --quiet --load $1;
    # Add an extra newline
    echo
}
于 2017-05-20T03:34:30.463 回答
2

这行得通;至少在 11.2 下,我没有收到任何确认提示(exit)

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

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

scm() {
  if (( $# )); then
    local prog=$1
    shift
    scheme --quiet --load "$prog" --eval '(exit)' -- "$@"
  else
    scheme
  fi
 }
于 2021-07-16T15:24:55.727 回答