1

ユーザーのシェルを起動したいが、コードで制御できるように標準入力と標準出力をリダイレクトする小さなスクリプトを作成しています。これは可能でしょうか?私はすでにこのコードで試しました(間違っているかもしれません):

new_stdout, new_stdin = IO.pipe
pid = fork {
    $stdout.reopen new_stdin
    exec(ENV['SHELL'])
}

new_stdin.puts "Test"
Process.wait(pid)

これは、新しいシェル インスタンスを起動するだけです。

ありがとう!

4

2 に答える 2

2

もしかして、こういうこと?

IO.popen 'sh', 'r+' do |io|
  io.puts 'echo how now brown cow | tr a-z A-Z'
  result = io.gets
  p [:result, result.size, result]
end
于 2013-03-13T17:06:19.310 に答える
0

プログラムで単純さが必要な場合は、 IO.pipeまたはOpen3.popen3メソッドを使用することもできます。高度な使用法については、参照する可能性のある一部の認識プロジェクトで行います。ここでは、プロセスを悪魔化し、Ruby 1.9 の::Process::spawnを使用して、https: //github.com/Gurpartap/cognizant/blob/master/lib/cognizant/process/execution.rb

于 2013-03-13T17:03:02.007 に答える