Lua更改当前/工作目录,Linux(无LFS或任何非std模块)

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

我需要在lua脚本中更改当前的工作目录以执行特定的操作,但是这个简单的任务给我带来了麻烦。 我编写测试脚本test.lua:

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).