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
Respuestas:
Úselo
$stdin.isatty
si desea intentar evitar la entrada no terminal. Tenga en cuenta que hay formas de evitar esto si el usuario está lo suficientemente determinado.fuente
/dev/tty
embargo, aún puede abrirse y obtener información desde allí.Pipe funciona como un "redirector" de STDOUT (que lo hace
cat abc.txt
) a STDIN (que acepta elfoo.rb
script.En mi humilde opinión esto pertenece en superuser.com
fuente
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).
fuente
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 .
fuente