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

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

os.execute(“cd / usr”)
os.execute(“ls”)

但是lua test.lua输出为:

test.lua

当前目录并没有改变。错在哪里?而且我不能使用LFS或任何非标准模块。


感谢所有人的解释情况。我选择另一种方式:在运行lua脚本之前更改工作目录,但我在脚本中使用的路径和脚本方面遇到了许多麻烦。

原文链接 https://stackoverflow.com/questions/8561659

点赞
stackoverflow用户513763
stackoverflow用户513763

不使用外部库是不可能实现的。你可以使用类似以下代码的方法:

os.execute("cd /usr/ && ls")
2011-12-19 13:04:39
stackoverflow用户72344
stackoverflow用户72344

在 Unix 系统中,os.execute() 会产生一个子进程及其子进程。在 jpjacobs 的回答中,第一个进程会执行 shell。

目录更改操作只影响子进程,不影响 Lua 解释器执行程序的进程。

2011-12-19 13:13:08
stackoverflow用户734069
stackoverflow用户734069

Lua标准库旨在既小巧又便携。因此,除了几个特定的函数外,它都基于C标准库的功能。它没有改变目录的函数,这就是为什么像LFS这样的库会存在的原因。

你是否考虑过Lua可能不适合你的需求?如果你在一个不允许加载非标准模块的环境中进行类似shell的脚本工作,也许Python或Perl对你来说更好。它们都有丰富的标准库,带有许多功能,而无需下载非标准模块。

如果你想在Lua中进行真正的shell-style脚本编写,你需要使用模块。就是这么简单。所以,你应该使用外部模块或使用其他语言。

2011-12-19 17:26:43
stackoverflow用户312586
stackoverflow用户312586

这有点 hack,不过你尝试过创建当前文件夹中所需文件夹的符号链接吗,这样就完全不需要改变当前文件夹了。

os.execute("ln -s /usr/foo") -- 在当前目录创建名为 "foo" 的符号链接
os.execute("ln -s /usr/bar") -- 在当前目录创建名为 "bar" 的符号链接

baz = require('foo.baz') -- 加载文件 /usr/foo/baz.lua
2011-12-20 08:21:37
stackoverflow用户4170264
stackoverflow用户4170264

以下是使用 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)。
 驱动器 E 的卷是 Data
 卷的序列号是 DE34-ED00

 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 个文件         11 645 字节
               3 个目录 181 729 161 216 字节可用
true    exit    0
程序耗时 0.06 秒 (pid: 8832)。
2018-08-28 08:48:25