gem install mixlib-shellout
und in der Ruby-Skript
require 'mixlib/shellout'
cmd = Mixlib::ShellOut.new('linux cmd')
cmd.run_command
# And then optionally, to raise an exception if the command fails like shell_out!()
cmd.error!
ETA: Wenn Sie die Instanz selbst zu schaffen vermeiden wollen, Dump ich in der Regel diese Wrapper fucntion in Skripten, wo ich es verwenden:
def shellout(cmd, ok_exits = [0])
run = Mixlib::ShellOut.new(cmd)
run.run_command
if run.error? || !ok_exits.include?(run.exitstatus)
puts "#{cmd} failed: #{run.stderr}"
exit 2
end
run.stdout
end
Das wird Ihnen nur die Basis-API geben, der 'shell_out()' Helfer kommt eigentlich von Chef. Ich bearbeite dein Beispiel :) – coderanger
Also zusammenzufassen 'Mixlib :: ShellOut.new' sollte verwendet werden? Der Helfer 'shell_out' wird nur von Chef angeboten? –
'Mixlib :: Shellout' ist eine Klasse, daher müssen Sie Instanzen davon initialisieren. Chef wickelt dies in ein Modul ein, das enthalten sein kann, um die Klassenmethoden zu erhalten, aber es ist abhängig von der Chef-Umgebung. Sie könnten jedoch Ihr eigenes Modul einpacken. https://github.com/chef/chef/blob/c1a389c2a8452e9b796aa1d34c4d9e51f4af30c7/lib/chef/mixin/shell_out.rb –