Как я могу сохранить каталог изменений вне сценария оболочки в факторе?
У меня есть следующий код фактора в файле:
IN: set-work-dir
USING: shell ;
CONSTANT: work-dir "/code" ! I also tried "c:/code" and "c:\\code"--same error
work-dir cd
Когда я пытаюсь запустить скрипт из фактора, я получаю эту ошибку:
C:\>/usr/bin/factor/factor /usr/bin/factor/work/set-work-dir.factor
Generic word absolute-path does not define a method for the fixnum class.
Dispatching on object: 47
(U) Quotation: [ c-to-factor => ]
Word: c-to-factor
(U) Quotation: [ [ (get-catchstack) push ] dip call => (get-catchstack) pop* ]
(O) Word: command-line-startup
(O) Word: run-script
(O) Word: set-current-directory
(O) Method: M\ object absolute-path
(O) Word: no-method
(O) Method: M\ object throw
(U) Quotation: [
OBJ-CURRENT-THREAD special-object error-thread set-global
current-continuation => error-continuation set-global
[ original-error set-global ] [ rethrow ] bi
]
Я могу заставить это работать, если вместо USING: shell ;
я имею USING: io.files.private
но изменение каталога не сохраняется вне выполнения скрипта. Я предполагаю, что использование оболочки приведет к сохранению изменения каталога, что, как я понимаю, может быть неверным предположением. Как я могу написать сценарий, чтобы изменить каталог и сохранить изменение каталога вне сценария?
Windows 7 (Да, я знаю, что разделитель каталогов в Windows обычно \
и я попробовал '\' тоже. Но /
на самом деле работает на Windows тоже. Кроме того, путь работает, когда я использую io.files.private).
Коэффициент 0,98 x86,64 (1788, Heads/ Master-e187d63d3c, Вт 18 октября 02:14:22 2016) [Microsoft Visual C++ 190023506] на окнах
1 ответ
cd
Работа существует в двух словах. Который из cd
звонить зависит от того, кто ты USING:
, Если shell
затем shell:cd
называется если io.files.private
затем io.files.private:cd
называется. Конечно, вы можете использовать и полное имя.
Хотя io.files.private:cd
слово не должно использоваться пользовательским кодом, потому что имя вокаба заканчивается на .private
что означает, что слово не является частью общедоступного интерфейса. Вместо этого используйте set-current-directory
:
IN: scratchpad "/tmp" set-current-directory
IN: scratchpad "." absolute-path .
"/tmp"
Изменение не будет сохраняться после завершения процесса Factor.