Problema de entrada estándar de Linux

0

Soy nuevo en Linux. Y estoy usando Red Hat Enterprise Versión 5. Hay un programa ruby ​​que usa la entrada estándar como su entrada (por ejemplo, la entrada del proceso del programa Ruby desde la entrada estándar). Creo que la entrada estándar debería ser el teclado, ¿correcto?

Entonces, creo que otros tipos de entrada (entrada no estándar) no deberían funcionar (es decir, el programa ruby ​​no debería ser capaz de leer la entrada de dicha entrada no estándar), pero en realidad he intentado usar trabajos de tubería, estoy muy confundido porque creo que la tubería debería ser algún otro tipo de entrada, aparte de la entrada estándar, ¿por qué podría funcionar? es decir, poner el texto "123" en abc.txt con pipe, podría lograr el mismo resultado que usar el teclado como entrada para escribir "123" para el programa ruby.

Aquí está la muestra que funciona y me confunde,

cat abc.txt | ~ / test / rubysrc / foo.rb

gracias de antemano, George

George2
fuente
Esta pregunta parece estar combinando "no estándar" con "no teclado".
JdeBP

Respuestas:

2

Úselo $stdin.isattysi desea intentar evitar la entrada no terminal. Tenga en cuenta que hay formas de evitar esto si el usuario está lo suficientemente determinado.

Ignacio Vazquez-Abrams
fuente
Entonces, ¿el proceso correcto del proceso no puede procesar la entrada del teclado si está conectado por tubería?
George2
1
No a través de stdin. Sin /dev/ttyembargo, aún puede abrirse y obtener información desde allí.
Ignacio Vazquez-Abrams
2

Pipe funciona como un "redirector" de STDOUT (que lo hace cat abc.txt) a STDIN (que acepta el foo.rbscript.

En mi humilde opinión esto pertenece en superuser.com

Eimantas
fuente
2

En realidad, la tubería conecta la salida estándar del proceso izquierdo con la entrada estándar del proceso correcto, por lo que tiene sentido que esto funcione. Ver también http://en.wikipedia.org/wiki/Pipeline_%28Unix%29 .

(Y sí, esto probablemente debería ir a superuser.com).

djc
fuente
Entonces, ¿el proceso correcto no puede procesar la entrada del teclado si está conectado por tubería?
George2
2

Las tuberías funcionan conectando la entrada y salida estándar de un proceso a otros procesos, simulando a un usuario escribiendo en su teclado. Esto permite que los procesos se conecten entre sí sin tener que conocerse entre sí, o que el usuario los use directamente desde su teclado.

Wikipedia tiene una buena reseña .

dsolimano
fuente