Ответ 1
scheme < file.scm
должен работать (если вы не укажете --interactive
, а stdin не является терминалом, схема работает не в интерактивном режиме).
Я хочу напечатать что-то вроде "schem file.scm" и интерпретировать его, а затем вернуть обратно в свою оболочку, а не загружать ее в REPL.
edit: Я попробовал схему < test.scm, и он по-прежнему использует REPL, единственное отличие заключается в том, что схема завершается, когда поток заканчивается.
scheme < file.scm
должен работать (если вы не укажете --interactive
, а stdin не является терминалом, схема работает не в интерактивном режиме).
Чтобы запустить программу схемы с использованием MIT Scheme:
scheme --quiet < program.scm
Опция --quiet
гарантирует, что вывод из вашей программы - это единственное, что отображается (т.е. вы не увидите REPL в соответствии с вашими требованиями).
Предостережение: это не будет работать, если ваша программа запрашивает у пользователя ввод данных с использованием процедур ввода (например, read
, read-char
, read-line
и т.д.). Это из-за перенаправления ввода оболочки (<
) (см.: соответствующий вопрос). К сожалению, в настоящее время нет подходящего способа выполнения сценария MIT Scheme из командной строки при использовании процедур ввода. Наилучшим вариантом, вероятно, является mit-scheme --quiet --load 'myscript'
, но вам придется вручную выйти из схемы MIT, когда сценарий завершится. Соответствующая ветка списка рассылки: [MIT-Scheme-devel] Как запустить скрипт и выйти?
ОБНОВЛЕНИЕ: Из-за возможности, что вы можете ошибочно ввести <
как >
, что приведет к перезаписи вашего исходного кода, я бы предложил инкапсулировать вышеупомянутую команду в сценарий оболочки или функцию оболочки. Например:
runscheme () {
scheme --quiet < "$1"
}
Затем вы можете запустить runscheme program.scm
, не опасаясь, что ваш исходный код будет перезаписан. (Особая благодарность Полу Руни за доведение этой потенциальной ошибки до моего сведения).
scheme --help
:
--batch-mode, --quiet, --silent
Подавляет отчет о запуске версий и авторских прав, а также прощальная речь.
Этот параметр командной строки, по-видимому, ошибочно пропущен из списка параметров командной строки в документации, но я думаю, что это допустимый параметр командной строки, потому что scheme --help
показывает его, а также потому, что --batch-mode
используется в других частях справочного руководства (например, здесь).
Я думаю, что вы хотите, это SCM. Вы можете выполнить .scm script следующим образом:
$ 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