Lua 命令行字符串
Lua cmd-line string
假设我用这个 cmd 调用 Lua:
luajit neuralnetwork.lua --satEpoch "somestring" --maxEpoch 50
如何从 Lua 访问相同的 cmd 行字符串?
我知道 arg
table,但它删除了原始命令字符串中的所有引号,因此难以重建:
{
"--maxEpoch"
"--satEpoch"
"50"
"somestring"
[-1] : "luajit"
[0] : "examples/neuralnetwork.lua"
}
如果我可以从 Lua 中将确切的字符串保存到文件中,我以后可以轻松地再次调用它。
毫无疑问有人会证明我是错的,但通常我认为这是不可能的。是 shell 而不是 luajit 去掉引号并将行分割成单独的标记。
@peterpi 是正确的,shell 正在解释命令并因此去除引号。但是,要让 shell 以与以前相同的方式解释命令,并不需要完全重建命令。
对于简单的情况,将参数连接到脚本通常就足够了:
local command = table.concat(arg, ' ', -1, #arg)
如果确实需要引号,这将失败,最常见的是当参数包含 space 或 shell 字符时,因此引用所有内容很容易并且更健壮,但并不漂亮。
这是一个示例,其中使用 Lua 模式来检查特殊 (bash) shell 字符和 space 来决定是否需要引号以及需要哪些引号。它可能不完整,但它处理文件名、大多数字符串和数字作为参数。
local mod_arg = { }
for k, v in pairs(arg) do
if v:find"'" then
mod_arg[k] = '"'..v..'"'
elseif v:find'[%s$`><|#]' then
mod_arg[k] = "'"..v.."'"
else
mod_arg[k] = v
end
end
local command = table.concat(mod_arg, ' ', -1, #mod_arg)
print(command)
假设我用这个 cmd 调用 Lua:
luajit neuralnetwork.lua --satEpoch "somestring" --maxEpoch 50
如何从 Lua 访问相同的 cmd 行字符串?
我知道 arg
table,但它删除了原始命令字符串中的所有引号,因此难以重建:
{
"--maxEpoch"
"--satEpoch"
"50"
"somestring"
[-1] : "luajit"
[0] : "examples/neuralnetwork.lua"
}
如果我可以从 Lua 中将确切的字符串保存到文件中,我以后可以轻松地再次调用它。
毫无疑问有人会证明我是错的,但通常我认为这是不可能的。是 shell 而不是 luajit 去掉引号并将行分割成单独的标记。
@peterpi 是正确的,shell 正在解释命令并因此去除引号。但是,要让 shell 以与以前相同的方式解释命令,并不需要完全重建命令。
对于简单的情况,将参数连接到脚本通常就足够了:
local command = table.concat(arg, ' ', -1, #arg)
如果确实需要引号,这将失败,最常见的是当参数包含 space 或 shell 字符时,因此引用所有内容很容易并且更健壮,但并不漂亮。
这是一个示例,其中使用 Lua 模式来检查特殊 (bash) shell 字符和 space 来决定是否需要引号以及需要哪些引号。它可能不完整,但它处理文件名、大多数字符串和数字作为参数。
local mod_arg = { }
for k, v in pairs(arg) do
if v:find"'" then
mod_arg[k] = '"'..v..'"'
elseif v:find'[%s$`><|#]' then
mod_arg[k] = "'"..v.."'"
else
mod_arg[k] = v
end
end
local command = table.concat(mod_arg, ' ', -1, #mod_arg)
print(command)