我如何在 Shell 脚本因素之外保留更改目录?

How Can I Persist a Change Directory Outside of a Shell Script In Factor?

我在文件中有以下因素代码:

IN: set-work-dir
USING: shell ;
CONSTANT: work-dir "/code" ! I also tried "c:/code" and "c:\code"--same error
work-dir cd 

当我尝试 运行 来自 factor 的脚本时,我得到了这个错误:

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: io.files.private 而不是 USING: shell ;,我可以将其发送到 运行,但目录更改不会保留在脚本的 运行 之外.我假设使用 shell 会导致目录更改持续存在——我意识到这可能是一个错误的假设。如何编写脚本来更改目录并使目录更改在脚本之外保持不变?

Windows 7 (是的,我知道 Windows 上的目录分隔符通常是 \,我也试过 '\'。但是 / 实际上也适用于 Windows。此外,当我使用 io.files.private).

时路径也有效

因子 0.98 x86.64(1788,heads/master-e187d63d3c,2016 年 10 月 18 日星期二 02:14:22) [Microsoft Visual C++ 190023506] windows

cd 作品存在于两个词汇中。 cd 会调用哪一个取决于你是什么 USING:。如果 shell 则调用 shell:cd 如果 io.files.private 则调用 io.files.private:cd。您当然也可以使用完全限定名称。

尽管用户代码不应使用 io.files.private:cd 单词,因为词汇表的名称以 .private 结尾,这表明该单词不是 public 界面的一部分。而是使用 set-current-directory:

IN: scratchpad "/tmp" set-current-directory
IN: scratchpad "." absolute-path .
"/tmp"

Factor 进程终止后更改将不会保留。