Lua строка строки cmd
Скажем, я звоню Луа с этим cmd:
luajit neuralnetwork.lua --satEpoch "somestring" --maxEpoch 50
Как я могу получить доступ к этой же строке строки cmd из Lua?
Я знаю о arg
table, но он удаляет все кавычки из исходной командной строки, что затрудняет восстановление:
{
"--maxEpoch"
"--satEpoch"
"50"
"somestring"
[-1] : "luajit"
[0] : "examples/neuralnetwork.lua"
}
Если я могу сохранить точную строку в файл из Lua, я могу легко вызвать ее позже.
2 ответа
@peterpi правильно, что оболочка интерпретирует команду и в результате удаляет кавычки. Однако для точного восстановления команды не требуется, чтобы оболочка интерпретировала команду так же, как и раньше.
Для простых случаев достаточно объединения аргументов в сценарии:
local command = table.concat(arg, ' ', -1, #arg)
Это не удастся, если кавычки действительно необходимы, чаще всего, когда аргумент содержит пробел или символ оболочки, поэтому цитирование все легко и несколько надежнее, но не красиво.
Вот пример с шаблоном Lua для проверки специальных (bash) символов оболочки и пробелов, чтобы решить, нужны ли и какие кавычки. Он может быть неполным, но он обрабатывает имена файлов, большинство строк и числа в качестве аргументов.
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)
Без сомнения, кто-то докажет, что я неправ, но в целом я не думаю, что это возможно. Это оболочка, а не luajit, которая убирает кавычки и разбивает строку на отдельные токены.