Выполнение кода через функцию Ruby Eval - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь выполнить код в ruby ​​eval (), сначала вырвав строку, введя ("). Следующий код используется для внедрения.

myuser"%2B`[system('uname')]`%2B"

Я не получаю сообщение об ошибке, но команда между обратным тылом не выполняется.

Я пытаюсь ввести значение имени пользователя ниже.

eval "\"Hello "+params['username']+"\""

1 Ответ

0 голосов
/ 30 апреля 2018

Я не на 100% уверен в вашем случае использования, но могу сказать вам следующее:

system запустит команду оболочки и вернет успех / неудачу, но не сохранит результаты:

irb(main):001:0> x = system('uname')
Linux
=> true
irb(main):002:0> x
=> true

Backticks запустит команду оболочки и сохранит вывод, но не требует слова system:

irb(main):003:0> x = `uname`
=> "Linux\n"
irb(main):004:0> x
=> "Linux\n"

(Если вы добавите «system» внутри обратных ссылок, он будет запускать «system» в командной строке; обычно это не то, что вам нужно)

Только обратные метки ничего не делают внутри строк:

irb(main):005:0> "I am `uname`"
=> "I am `uname`"

Но они будут расширены с #{} внутри двойных кавычек:

irb(main):006:0> "I am #{`uname`}"
=> "I am Linux\n"

Но обычно лучше сначала выполнить команду, проверить на наличие ошибок, а затем добавить ее в строку, например

result = `uname`
# Check for errors here
output = "context #{result} more context"
...