簡體   English   中英

如何在Linux中作為Ruby腳本運行命令?

[英]How do I to run a command in Linux as a Ruby script?

假設我有一些終端命令,例如:

sudo mycommand1
mycommand2
#.....

我應該怎么做通過Ubuntu中的ruby腳本(而不是bash)運行它們?

更新:我有一個ruby腳本:

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

您可以執行systemexec或將命令放在反引號中。

exec("mycommand")將替換當前進程,因此在ruby腳本結束時真的只是實用。

system("mycommand")將創建一個新進程,如果命令成功則返回true,否則返回nil。

如果需要在Ruby腳本中使用命令的輸出,請使用反引號:

response = 'mycommand`

SO上有很多問題可以回答這個問題。 但是,您可以使用systemexec ,(反引號), %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()之間的區別,或者反向鏈接以獲取相關文檔的鏈接。

您可以嘗試以下方法:

  1. %x[command]
  2. Kernel.system"command"
  3. run "command"

制作一些file.rb

#!/path/to/ruby

system %{sudo mycommand1}
system %{mycommand2}

並且chmod具有exec權限的文件(例如755)

你需要在兩個命令之間傳遞變量,一起運行它們:

system %{sudo mycommand1; \
         mycommand2}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM