Выполнение команды оболочки в фоновом режиме из ruby ​​с правильным экранированием аргумента - PullRequest
11 голосов
/ 10 мая 2011

Мне нужно запустить команду в фоновом режиме, но я хочу правильно экранировать ее параметр.

system("rake send_mails subject='#{params[:subject]}' 2> /dev/null 1> /dev/null &");

Если я напишу system("rake", "send_mails", params[:subject]), тогда у меня нет «места» для перенаправлений изнак &.Если нет, у меня нет экранирования для параметра subject.

Как я могу решить эту проблему?

1 Ответ

20 голосов
/ 10 мая 2011

В Ruby 1.9 попробуйте Process.spawn :

# Spawn a new process and run the rake command
pid = Process.spawn({"subject" => params[:subject]},
                    "rake", "send_mails",
                    :out => 'dev/null', :err => 'dev/null')

# Detach the spawned process
Process.detach pid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...