Я новичок в Linux. И я использую Red Hat Enterprise Version 5. Существует программа ruby, которая использует стандартный ввод в качестве входных данных (например, ввод программы Ruby из стандартного ввода). Я думаю, что стандартный ввод должен быть клавиатурой, правильно?

Итак, я думаю, что другие виды ввода (нестандартный ввод) не должны работать (т. Е. Программа ruby не должна иметь возможность считывать ввод с такого нестандартного ввода), но на самом деле я пробовал использовать конвейерные обработки, я так запутался потому что я думаю, что pipe должен быть чем-то другим, кроме стандартного ввода, почему он может работать? то есть, поместив текст "123" в abc.txt с конвейером, можно получить тот же результат, что и при использовании клавиатуры в качестве ввода для ввода "123" для программы ruby.

Вот пример, который работает и делает меня смущенным,

кошка abc.txt | ~/ Тест / rubysrc / foo.rb

спасибо заранее, Джордж

4 ответа4

2

Труба работает как "перенаправитель" из STDOUT (который делает cat abc.txt) в STDIN (который принимает скрипт foo.rb

ИМХО это принадлежит superuser.com

2

На самом деле, канал соединяет стандартный вывод левого процесса со стандартным стандартным процессом, поэтому имеет смысл, что это работает. Смотрите также http://en.wikipedia.org/wiki/Pipeline_%28Unix%29.

(И да, это, вероятно, следует перейти к superuser.com.)

2

Используйте $stdin.isatty если вы хотите запретить нетерминальный ввод. Обратите внимание, что есть способы обойти это, если пользователь достаточно определен.

2

Каналы работают, соединяя стандартный ввод и вывод одного процесса с другими процессами, имитируя пользовательский ввод с клавиатуры. Это позволяет связывать процессы без необходимости знать друг о друге или использовать их непосредственно с клавиатуры.

В Википедии есть хорошая рецензия.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .