1

次のような端末コマンドがあるとします。

sudo mycommand1
mycommand2
#.....

Ubuntu で (bash ではなく) ruby​​ スクリプトを介してそれらを実行するにはどうすればよいですか?

更新: 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
4

4 に答える 4

1

これに答えるSOに関する多くの質問があります。ただし、、、(バッククォート)を使用するかsystem、を使用して、さまざまな方法でコマンドを実行できます。私はopen3-を使用することを好みますexec%x{}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()の違い、またはBackticksを参照してください。

于 2012-10-30T05:32:27.487 に答える
1

systemexec、またはコマンドをバッククォートで配置できます。

exec("mycommand")現在のプロセスを置き換えるので、実際には Ruby スクリプトの最後でのみ実用的です。

system("mycommand")新しいプロセスを作成し、コマンドが成功した場合は true を返し、それ以外の場合は nil を返します。

Ruby スクリプトでコマンドの出力を使用する必要がある場合は、バッククォートを使用します。

response = 'mycommand`
于 2012-10-30T04:48:15.580 に答える
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持つファイル (例: 755)

2 つのコマンド間で変数を渡す必要がある場合は、それらを一緒に実行します。

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