1

假设我有一些终端命令,例如:

sudo mycommand1
mycommand2
#.....

我应该如何在 Ubuntu 中通过 ruby​​ 脚本(而不是 bash)运行它们?

更新:我有一个红宝石脚本:

def my_method1()
  #calculating something.....
end

def method2(var1, var2)
  #how do I sudo mycommand1 and any other Lunix command from here?
end

def method3(var4)
  #calculating something2....
end
4

4 回答 4

1

您可以执行system,exec或将命令放在反引号中。

exec("mycommand")将替换当前进程,因此这仅在您的 ruby​​ 脚本结束时才实用。

system("mycommand")如果命令成功,将创建一个新进程并返回 true,否则返回 nil。

如果您需要在 Ruby 脚本中使用命令的输出,请使用反引号:

response = 'mycommand`
于 2012-10-30T04:48:15.580 回答
1

SO上有很多问题可以回答这个问题。system但是,您可以使用、exec、(反引号)%x{}或使用以多种方式运行命令open3。我更喜欢使用 open3 -

require 'open3'

log = File.new("#{your_log_dir}/script.log", "w+")
command = "ls -altr ${HOME}"

Open3.popen3(command) do |stdin, stdout, stderr|
    log.puts "[OUTPUT]:\n#{stdout.read}\n"
    unless (err = stderr.read).empty? then 
        log.puts "[ERROR]:\n#{err}\n"
    end
end

如果您想了解更多关于其他选项的信息,可以参考Ruby、exec、system 和 %x() 之间的差异或反引号以获取相关文档的链接。

于 2012-10-30T05:32:27.487 回答
1

您可以尝试以下方法:

  1. %x[command]
  2. Kernel.system"command"
  3. run "command"
于 2012-10-30T05:37:24.693 回答
0

做一些file.rb

#!/path/to/ruby

system %{sudo mycommand1}
system %{mycommand2}

以及chmod具有 exec 权限的文件(例如 755)

你需要在两个命令之间传递变量,一起运行它们:

system %{sudo mycommand1; \
         mycommand2}
于 2012-10-30T04:44:41.007 回答