Run commands in background/ru

Иногда возникает необходимость в запуске shell скриптов в фоне, и при их заверешинии получать "signal" в awesome - без зависания awesome. Может быть у вас медленный интернет и вы просто хотите запустить перевод через google translate, а awesome из-за этого завис...

background_timers = {} function run_background(cmd,funtocall) local r = io.popen("mktemp") local logfile = r:read("*line") r:close cmdstr = cmd .. " &> " .. logfile .. " & "                                        local cmdf = io.popen(cmdstr) cmdf:close background_timers[cmd] = { file = logfile, timer = timer{timeout=1} }                                                                                 background_timers[cmd].timer:add_signal("timeout",function                           local cmdf = io.popen("pgrep -f '" .. cmd .. "'")                                 local s = cmdf:read("*all")                                                        cmdf:close                                                                       if (s=="") then                                                                        background_timers[cmd].timer:stop                                                local lf = io.open(background_timers[cmd].file)                                    funtocall(lf:read("*all"))                                                         lf:close            io.popen("rm " .. background_timers[cmd].file)                                                                   end                                                                            end) background_timers[cmd].timer:start end

Пример использования:

run_background("ping -c 5 www.google.ru",function(txt)                                 naughty.notify({text=txt})                                                       end)

Этот пример покажет вывод команды 'ping' через 5 секунд (потому что стоит параметр -c 5).