Module: ShellHelpers::SudoLoop

Extended by:
SudoLoop
Included in:
SudoLoop
Defined in:
lib/shell_helpers/sh.rb

Overview

SudoLoop {{{ extend SudoLoop.configure to run a sudo loop SH.sh("ls /", sudo: "sudo".extend(SH::SudoLoop.configure(**opts))

Instance Method Summary collapse

Instance Method Details

#configure(**opts) ⇒ Object



66
67
68
69
70
71
72
73
74
75
# File 'lib/shell_helpers/sh.rb', line 66

def configure(**opts)
  return Module.new do |m|
    m.define_method(:sudo_loop) do
      SudoLoop.instance_method(:run_sudo_loop).bind(self).call(**opts)
    end
    m.define_method(:stop_sudo_loop) do
      SudoLoop.instance_method(:stop_sudo_loop).bind(self).call
    end
  end
end

#run_sudo_loop(command: "sudo -v", interval: 30, init_command: command) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/shell_helpers/sh.rb', line 77

def run_sudo_loop(command: "sudo -v", interval: 30, init_command: command)
  if @sudo_loop_thread.nil? or !@sudo_loop_thread.alive?
    Sh.sh_or_proc(init_command, log: false)
    #require 'pry'; binding.pry
    @sudo_loop_thread = Thread.new do
      loop do
        Sh.sh_or_proc(command, log: false)
        sleep(interval)
      end
    end
    @sudo_loop_thread.run
  end
end

#stop_sudo_loopObject



91
92
93
# File 'lib/shell_helpers/sh.rb', line 91

def stop_sudo_loop
  @sudo_loop_thread&.kill
end