'scheme file.scm'のようなものを入力してファイルを解釈させてから、REPLにロードするのではなく、シェルに戻したいと思います。
編集:scheme <test.scmを試しましたが、それでもREPLを使用していますが、唯一の違いは、ストリームが終了するとスキームが終了することです。
scheme < file.scm
は機能するはずです(--interactive
を指定せず、stdinが端末でない限り、スキームは非対話的に機能します)。
MIT Schemeを使用してschemeプログラムを実行するには:
scheme --quiet < program.scm
--quiet
オプションは、プログラムからの出力が表示される唯一のものであることを保証します(つまり、要件に従ってREPLは表示されません)。
警告:プログラムが入力手順(例:read
、read-char
、read-line
など)を使用してユーザーに入力を求める場合、これは機能しません。 。)。これは、シェル入力リダイレクト(<
)が原因です(参照: 関連する質問 )。残念ながら、現在、入力プロシージャが使用されている場合、コマンドラインからMIT Schemeスクリプトを実行する適切な方法はありません。最良のオプションはおそらくmit-scheme --quiet --load 'myscript'
ですが、スクリプトが終了したら手動でMITSchemeを終了する必要があります。関連するメーリングリストスレッド: [MIT-Scheme-devel]スクリプトを実行して終了する方法は?
編集:<
を>
と間違えて入力すると、ソースコードが上書きされる可能性があるため、上記のコマンドをシェルスクリプトまたはシェル関数にカプセル化することをお勧めします。例えば:
runscheme () {
scheme --quiet < "$1"
}
その後、ソースコードが上書きされることを恐れずにrunscheme program.scm
を実行できます。 ( Paul Rooney この潜在的な間違いを私の注意を引いてくれたことに特に感謝します)。
scheme --help
:
--batch-mode、-quiet、-silent
バージョンと著作権の起動レポート、および評価を抑制します。
このコマンドラインオプションは ドキュメントのコマンドラインオプションのリスト から誤って省略されているようですが、scheme --help
がそれを示しており、--batch-mode
が他で使用されているため、これは正当なコマンドラインオプションだと思いますリファレンスマニュアルの一部(例: ここ )。
あなたが欲しいのはSCMだと思います。次のような.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
チェック済みchez --help
、そして私はこれを見つけました(私がchezスキームを使用しているとしましょう):
chez --script ./temp.scm
また、--verbose
は非常に便利です:
chez --verbose --script ./temp.scm