Lua 命令行字符串

如何从 Lua 中访问相同的命令行字符串?

我知道关于 arg 表,但它会从原始命令字符串中删除所有引号,使重建变得困难:

如果我可以从Lua内部将确切的字符串保存到文件中,我以后可以轻松地再次调用它。

点赞
用户819046
用户819046

毫无疑问,有人会证明我是错误的,但通常情况下我认为这是不可能的。正是_shell_而不是luajit将引号去掉,并将该行分成单独的标记。

2015-09-03 15:46:34
用户2726734
用户2726734

@peterpi 是正确的,shell 解释命令会去掉引号。然而,重新构建命令并不是必要的,为了让 shell 以相同的方式来解释命令。

对于简单的情况,连接脚本参数通常就足够了:

local command = table.concat(arg, ' ', -1, #arg)

如果引号确实是必要的,例如一个参数包含空格或 shell 字符,那么引用所有内容就容易且更加健壮,但不够清晰。

下面是一个示例,利用 Lua 模式来检查特殊的(bash)shell 字符和空格,以决定是否需要哪些引号。它可能不是完整的,但可以处理文件名、大多数字符串和数字作为参数。

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)
2015-09-03 16:26:55