我如何在 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 进程终止后更改将不会保留。
我在文件中有以下因素代码:
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 进程终止后更改将不会保留。