Я хочу выполнить внешнюю программу в lua.Обычно это можно сделать с помощью
os.execute("run '"..arg0.."' 'arg1' arg2")
. Проблема с этим подходом заключается в том, что если я хочу передать пользовательский ввод в виде строки во внешнюю программу, пользовательский ввод может быть '; evil 'h4ck teh system' '
, а приведенный выше скрипт будет выполняться следующим образом:this:
/bin/bash -c "run ''; evil 'h4ck teh system' '' 'arg1' arg2"
Другая проблема возникает, когда у меня есть '$var'
в качестве аргумента, и оболочка заменяет его своей переменной среды.В моем конкретном случае у меня есть что-то вроде [[program 'set title "$My Title$"']]
- поэтому вложенные строки - и program
анализирует "$My Title$"
(с escape-последовательностями) иначе, чем '$My Title$'
(как есть).Поскольку я хочу установить для него заголовок, лучший способ - аргументы, подобные этому: 'My Title'
.Но теперь команда должна быть:
os.execute([[run "set title '$My Title$'"]])
Но теперь - как я уже сказал - $My
будет заменен пустой строкой, потому что среда не знает никакой переменной с именем $My
и потому, что,Я никогда не хотел, чтобы его заменили.
Поэтому я ищу обычный подход с
execv("run", {"set title '"..arg0.."'", arg1, arg2})