2015-09-03 3 views
3

Сказать, что я называю Lua с этим ЦМД:Lua CMD строки строка

luajit neuralnetwork.lua --satEpoch "somestring" --maxEpoch 50 

Как я могу получить доступ к этой же строке CMD строки из Lua?

Я знаю о arg столе, но он удаляет все цитаты из исходной командной строки, что делает его трудно восстановить:

{ 
    "--maxEpoch" 
    "--satEpoch" 
    "50" 
    "somestring" 
    [-1] : "luajit" 
    [0] : "examples/neuralnetwork.lua" 
} 

Если я могу сохранить точную строку в файл внутри Lua, я могу легко вызвать его позже.

ответ

4

@peterpi верно, что оболочка интерпретирует команду и, как результат, удаляет кавычки. Однако для восстановления команды точно не требуется, чтобы оболочка интерпретировала команду так же, как и раньше.

Для простых случаев конкатенации аргументы сценария достаточно часто:

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

Это будет ошибкой, если котировки на самом деле необходимы, чаще всего, когда аргумент содержит пробел или оболочку характер, поэтому цитирует все легкий и несколько более надежный, но не очень красивый.

Вот пример с шаблоном Lua для проверки специальных символов (пробелов) оболочки и пробелов, чтобы решить, нужны ли и какие кавычки. Он может быть не полным, но он обрабатывает имена файлов, большинство строк и числа в качестве аргументов.

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

Несомненно, кто-то докажет мне, что я ошибаюсь, но, как правило, я не думаю, что это возможно. Это shell, а не luajit, который отбирает цитаты и отбивает линию на отдельные жетоны.

Смежные вопросы