我是 Linux 新手。我使用的是 Red Hat Enterprise 版本 5。有一个 Ruby 程序使用标准输入作为其输入(例如,Ruby 程序从标准输入处理输入)。我认为标准输入应该是键盘,对吗?
因此,我认为其他类型的输入(非标准输入)应该不起作用(即 ruby 程序不应该能够从这种非标准输入中读取输入),但实际上我尝试过使用管道,我很困惑,因为我认为管道应该是其他类型的输入 - 除了标准输入,为什么它可以工作?即使用管道将文本“123”放入 abc.txt 中,可以实现与使用键盘作为输入为 ruby 程序输入“123”相同的结果。
下面是一个有效但让我感到困惑的示例,
猫 abc.txt | ~/test/rubysrc/foo.rb
提前致谢,乔治
答案1
$stdin.isatty
如果您想尝试阻止非终端输入,请使用。请注意,如果用户足够坚定,有办法解决这个问题。
答案2
管道充当从 STDOUT(执行cat abc.txt
)到 STDIN(接受foo.rb
脚本)的“重定向器”。
在我看来,这属于 superuser.com
答案3
实际上,管道将左侧进程的标准输出连接到右侧进程的标准输入,因此这样做是合理的。另请参阅http://en.wikipedia.org/wiki/Pipeline_%28Unix%29。
(是的,这可能应该转到 superuser.com。)
答案4
管道的工作原理是将一个进程的标准输入和输出连接到其他进程,模拟用户在键盘上打字。这样,进程就可以连接在一起,而无需彼此了解,或者由用户直接从键盘使用。
维基百科有一个写得很好。