Ich bin auf der Suche nach einem Ruby-Programm (eine Rake-Task) beobachten Sie eine Ausgabe von einem anderen Rake-Task. Der Ausgabeschreiber gibt an stderr aus. Ich würde gerne diese Zeilen lesen. Ich habe Schwierigkeiten, es einzurichten. Wenn ich einen Schriftsteller (stdout_writer.rb) haben, die ständig etwas druckt:Ruby Pipes, IO und Stderr Redirect
#!/usr/bin/env ruby
puts 'writing...'
while true
$stdout.puts '~'
sleep 1
end
und eine Datei, die es und Echos (stdin_reader.rb) lautet:
#!/usr/bin/env ruby
puts 'reading...'
while input = ARGF.gets
puts input
input.each_line do |line|
begin
$stdout.puts "got line #{line}"
rescue Errno::EPIPE
exit(74)
end
end
end
und ich versuche zu haben sie arbeiten zusammen, passiert nichts:
$ ./stdout_writer.rb 2>&1 | ./stdin_reader.rb
$ ./stdout_writer.rb | ./stdin_reader.rb
nichts ... obwohl, wenn ich nur in stdin_reader.rb echo, ich bekommen, was ich erwarten:
[email protected]:~/projects/opera_events/sendgrid-example-operaevent$ echo "ok true" | ./stdin_reader.rb
reading...
ok true
got line ok true
[email protected]:~/projects/opera_events/sendgrid-example-operaevent$
also wie würde ich ein Skript einrichten, das stderr piped, damit es es Zeile für Zeile lesen kann? Weitere Informationen: Das wird ein ubuntu Emporkömmling Service script1.rb | script2.rb
, wo script1 eine Nachricht sendet, und script2 prüft, ob die Nachricht von script1