我需要更改 lua 脚本中的当前工作目录以执行特定操作,但我在这个简单的任务中遇到了麻烦。我编写测试脚本 test.lua :
os.execute("cd /usr")
os.execute("ls")
但是 lua test.lua 输出是:
test.lua
当前目录不变。怎么了?而且我不能使用 LFS 或任何非标准模块。
感谢所有人解释它的情况。我选择了另一种方式:在运行 lua 脚本之前更改工作目录,但是我在脚本和脚本中使用的路径有很多麻烦。
在 Unix 上,os.execute()
产生一个子进程及其子进程。在 jpjacobs 的回答中,第一个进程将执行 shell。
目录更改操作只影响子进程,不会影响 Lua 解释器正在执行您的程序的进程。
如果没有外部库,这根本不可能。你可以使用类似的东西
os.execute("cd /usr/ && ls")
Lua 标准库旨在小巧便携。因此,它基于 C 标准库的所有功能,但只有少数功能。它没有改变目录的功能;这就是存在LFS 之类的库的原因。
您是否考虑过 Lua 可能不适合您的需求?如果您在不允许加载非标准模块的环境中执行 shell 样式的脚本工作,那么 Python 或 Perl 可能更适合您。它们都具有广泛的标准库,具有许多功能,无需下载非标准模块。
如果你想在 Lua 中做任何真正的 shell 风格的脚本,你需要模块。就是这么简单。因此,您应该使用外部模块或使用不同的语言。
这有点小技巧,但是您是否尝试过在当前文件夹中创建指向所需文件夹的符号链接,这样您根本不必更改当前文件夹?
os.execute("ln -s /usr/foo") -- link called "foo" in current dir
os.execute("ln -s /usr/bar") -- link called "bar" in current dir
baz = require('foo.baz') -- loading file /usr/foo/baz.lua
这是使用Zerobranie Lua 5.2编写的程序:
local sP = "E:/Documents/Lua-Projs/SVN/ScriptsWireE2"
local a, b, c = os.execute("cd "..sP.."&& dir")
print(a,b,c)
和输出:
Програма 'lua.exe' пусната в 'E:\Documents\Lua-Projs\ZeroBraineIDE\ZeroBraineProjects' (pid: 8832).
Volume in drive E is Data
Volume Serial Number is DE34-ED00
Directory of E:\Documents\Lua-Projs\SVN\ScriptsWireE2
08-03-2016 18:25 <DIR> .
08-03-2016 18:25 <DIR> ..
17-03-2016 18:15 <DIR> Bridges
07-03-2016 18:21 11 558 license
07-03-2016 18:21 87 readme.md
2 File(s) 11 645 bytes
3 Dir(s) 181 729 161 216 bytes free
true exit 0
Програмата завършена за 0.06 секунди (pid: 8832).