Lua更改当前/工作目录,Linux(无LFS或任何非std模块)
我需要在lua脚本中更改当前的工作目录以执行特定的操作,但是这个简单的任务给我带来了麻烦。 我编写测试脚本test.lua:Lua更改当前/工作目录,Linux(无LFS或任何非std模块),lua,dir,Lua,Dir,我需要在lua脚本中更改当前的工作目录以执行特定的操作,但是这个简单的任务给我带来了麻烦。 我编写测试脚本test.lua: os.execute("cd /usr") os.execute("ls") 但是lua test.lua输出是: test.lua 当前目录不变。怎么了?我不能使用LFS或任何非std模块 感谢大家对这一情况的解释。我选择了另一种方法:在运行lua脚本之前更改工作目录,但是我在脚本和脚本中使用的路径方面遇到了很多问题。没有外部库是不可能的。你可以用像这样的东西 o
os.execute("cd /usr")
os.execute("ls")
但是lua test.lua输出是:
test.lua
当前目录不变。怎么了?我不能使用LFS或任何非std模块
感谢大家对这一情况的解释。我选择了另一种方法:在运行lua脚本之前更改工作目录,但是我在脚本和脚本中使用的路径方面遇到了很多问题。没有外部库是不可能的。你可以用像这样的东西
os.execute("cd /usr/ && ls")
在Unix上,os.execute()
生成子进程及其子进程。在里面
根据Jacobs的回答,第一个进程将执行shell
目录更改操作只影响子进程,而不影响
Lua解释器执行程序的过程。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
以下是使用以下方法编写的程序: 以及outpuit:
Програма '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).
。
驱动器E中的卷是数据
卷序列号为DE34-ED00
E:\Documents\Lua Projs\SVN\ScriptsWireE2目录
08-03-2016 18:25 .
08-03-2016 18:25 ..
17-03-2016 18:15桥梁
07-03-2016 18:21 11 558许可证
07-03-2016 18:21 87 readme.md
2个文件11 645字节
3目录181 729 161 216字节可用
真出口0
ППаазззззз0.06азззззз(pid:8832)。
更改子进程中的当前工作目录不会影响父进程。(因此,cd
需要是一个内置的shell,而不是一个单独的程序。)模块有chdir(path)
和currentdir()
函数。在我的例子中,我需要这样的东西:os.execute(“cd my/specific/path”)
retCode=handler.myFunc(params)
handler-是可加载的模块(.so)在运行myFunc之前,我需要更改工作目录。非常有用的解决方案!太神了这真的很有帮助。这就像一个黑客,它做的工作!请如果答案中的某些错误/无用之处值得否决,至少指出错误所在。非常感谢。
Програма '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).