gpt4 book ai didi

ruby - 从管道读取后将用户丢弃到 IRB

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:49 26 4
gpt4 key购买 nike

我有这个脚本,它在执行时让用户进入 IRB session 。

很好,但是当我使用 *nix 管道获取输入时(例如使用 cat),IRB session 立即结束。

我可以将脚本(我们称之为 myscript.rb)缩减为以下内容:

require 'irb'if $stdin.stat.size > 0  @text = $stdin.read else  @text= "nothing"endARGV.clearIRB.start

当像这样执行时:ruby myscript.rb,我最终进入了 IRB session (正如预期的那样)。

但是(假设 foo.txt 存在于 cwd 中): cat foo.txt | ruby myscript.rb 将只打印 IRB 提示,然后 IRB session 关闭(我将被转到 $bash)。

任何已知的解决方法或想法?

顺便说一句:它在 ruby​​ 1.8.7 和 1.9.2 上具有相同的行为。

最佳答案

我认为你的问题是,当你通过管道传输到你的脚本时,STDIN 将是你文件中的流,所以当你启动 IRB 时,它会从同一个流中读取,但请注意它在它的末尾,然后退出,只是就像您键入 ctrl-D(这是文件信号的手动结束)时一样。

您可以像这样重新打开 STDIN 以从 tty(即键盘)读取:

STDIN.reopen(File.open('/dev/tty', 'r'))

但对我来说这看起来有点奇怪,我没有得到正确的 IRB 提示。 IRB 虽然有效。

关于ruby - 从管道读取后将用户丢弃到 IRB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4585313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com