Ответ 1
Вот (хакерское) решение: Во-первых, вам нужен OSProcess, поэтому запустите его в рабочей области:
Gofer new squeaksource:'OSProcess'; package:'OSProcess';load.
Затем поместите это в файл repl.st:
OSProcess thisOSProcess stdOut
nextPutAll: 'Welcome to the simple Smalltalk REPL';
nextPut: Character lf; nextPut: $>; flush.
[ |input|
[ input := OSProcess readFromStdIn.
input size > 0 ifTrue: [
OSProcess thisOSProcess stdOut
nextPutAll: ((Compiler evaluate: input) asString;
nextPut: Character lf; nextPut: $>; flush
]
] repeat.
]forkAt: (Processor userBackgroundPriority)
И, наконец, запустите эту команду:
squeak -headless path/to/squeak.image /absolute/path/to/repl.st
Теперь вы можете получать удовольствие от Smalltalk REPL. Не забудьте ввести команду:
Smalltalk snapshot:true andQuit:true
если вы хотите сохранить свои изменения.
Теперь, на объяснение этого решения:
OSProcess - это пакет, который позволяет запускать другие процессы, читать из stdin и писать в stdout и stderr. Вы можете получить доступ к stdout AttachableFileStream с помощью OSProcess thisOSProcess
(текущий процесс, ака скрипка).
Затем вы запускаете бесконечный цикл в userBackgroundPriority (чтобы другие процессы выполнялись). В этом бесконечном цикле вы используете Compiler evaluate:
для выполнения ввода.
И вы запускаете это в script с безголовым изображением.