Linux 标准输入问题

Linux 标准输入问题

我是 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

管道的工作原理是将一个进程的标准输入和输出连接到其他进程,模拟用户在键盘上打字。这样,进程就可以连接在一起,而无需彼此了解,或者由用户直接从键盘使用。

维基百科有一个写得很好

相关内容