Ich habe dieses Skript, das den Benutzer in eine IRB-Sitzung ablegt, wenn ausgeführt.Benutzer auf IRB nach dem Lesen von Rohr fallen lassen
Alles gut, aber wenn ich * Nix-Pipes verwenden, um die Eingabe zu erhalten (z. B. mit cat
), endet die IRB-Sitzung sofort.
Ich konnte das Skript reduzieren (nennen wir es myscript.rb) auf die folgenden:
require 'irb' if $stdin.stat.size > 0 @text = $stdin.read else @text= "nothing" end ARGV.clear IRB.start
Wenn er ausgeführt wird, wie: ruby myscript.rb
, beende ich im IRB-Sitzung auf (wie erwartet).
aber (unter der Annahme foo.txt
im cwd
vorhanden): cat foo.txt | ruby myscript.rb
wird nur die IRB Aufforderung drucken und dann die IRB-Sitzung geschlossen wird (ich bin auf $ bash fallen gelassen wird).
Alle bekannten Problemumgehungen oder Ideen?
BTW: es hat das gleiche Verhalten auf Ruby 1.8.7 sowie auf 1.9.2.
sieht aus wie dies das Problem ist, und $ stdin Wiedereröffnung wird eine Standard (I guess) IRB (keine Aufforderung, .irbrc nicht lesen und so weiter) erstellen. – aurelian
auf der anderen Seite zurückspulen oder suchen (0) auf $ stdin wird nicht funktionieren (ist tty). – aurelian
Was meinst du mit suchen (0) nicht funktioniert, warum würden Sie es brauchen? Wenn ich nicht klar war, meinte ich, dass du kurz vor IRB.start die stdin wieder öffnest. – Theo