Thread View: es.comp.os.linux.programacion
7 messages
7 total messages
Started by sio2
Wed, 07 Sep 2005 08:27
[BASH] Mandar información a la salida estándar de un programa
Author: sio2
Date: Wed, 07 Sep 2005 08:27
Date: Wed, 07 Sep 2005 08:27
49 lines
2567 bytes
2567 bytes
A ver si logro explicar lo que quiero hacer. Supongamos que uso cat:
$ cat
En este caso todo lo que escribo lo procesa la aplicaci�n (como es cat,
simplemente me devuelve lo escrito por la salida est�ndar. Lo importante
es que espera a que yo introduzca los datos y hasta que no diga yo que
ha acabado el flujo (Ctrl+D) cat no acaba.
Ahora otro ejemplo:
$ echo -e "L�nea 1\nL�nea 2" | cat
En este caso hago una tuber�a y cat finaliza de leer datos cuando 'echo'
acaba de envi�rselos. Tambi�n podr�a haber hecho:
$ mkfifo tuberia
$ cat < tuberia
[en otra consola]
$ echo -e "L�nea 1\nL�nea 2" > tuber�a
Mi duda es, �hay alguna forma de dejar a cat escuchando? Aunque la
aplicaci�n que le env�e datos haya acabado su flujo de datos. Por
supuesto esa forma imagino que no ser� una tuber�a. Para que se me
entienda, que yo haga:
$ echo -e "L�nea 1\nL�nea 2" > tuberia
Y cat me escupa esas dos l�neas, pero no d� por finalizado el flujo de
datos, as� que continue a la escucha. Y m�s tarde:
$ echo -e "L�nea 3\nL�nea 4" > tuberia
Y cat me escupa estas dos.
En realidad no lo quiero para una cosa tan pueril como 'cat', sino para
usarlo con "mplayer -slave".
Gracias de antemano.
--
Todos los hombres que no tienen nada importante que decir
hablan a gritos.
--- Enrique Jardiel Poncela ---
Si Di�xido de Silicio | Debian GNU/Linux
/ \ (SiO2) | Jos� Miguel S�nchez Al�s
O O Mineral de Cuarzo | sio2.ARROB@online.fr | URL #257033
Re: [BASH] Mandar información a la salida estándar de un programa
Author: Benjamín Albiñana
Date: Wed, 07 Sep 2005 15:26
Date: Wed, 07 Sep 2005 15:26
21 lines
1839 bytes
1839 bytes
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Cuando: Wed, 7 Sep 2005 10:27:00 +0200 Quien: sio2 <sio2.ARROB@online.fr> Que: [BASH] Mandar informaci�n a la salida est�ndar de un programa > A ver si logro explicar lo que quiero hacer. Supongamos que uso cat: A riesgo de cagarla, �no ser�a mejor que usaras tee, en lugar de cat? - -- Los dioses que sonrieron cuando naciste, ahora se est�n descojonando... -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFDHwap633hg168lHwRAldUAKDIOrp//W3sEWp0Vn9trjCFC90WbQCdEZ5h 4QR1zxNufX6LyVfgisjCZB0= =dR2L -----END PGP SIGNATURE-----
Re: [BASH] Mandar información a la salida estándar de un programa
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Wed, 07 Sep 2005 19:39
Date: Wed, 07 Sep 2005 19:39
11 lines
1624 bytes
1624 bytes
Hola sio2 <sio2.ARROB@online.fr> el Wed, 7 Sep 2005 10:27:00 +0200 escribiste: > En realidad no lo quiero para una cosa tan pueril como 'cat', sino para > usarlo con "mplayer -slave". tail(1) tiene una opción --follow que tal vez te sirva para algo -- Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Re: [BASH] Mandar información a la salida estándar de un programa
Author: sio2
Date: Wed, 07 Sep 2005 20:01
Date: Wed, 07 Sep 2005 20:01
90 lines
5193 bytes
5193 bytes
El mi�, 07 de sep de 2005, a las 15:26 GMT, Benjam�n Albi�ana escribi�:
>> A ver si logro explicar lo que quiero hacer. Supongamos que uso cat:
>
> A riesgo de cagarla, �no ser�a mejor que usaras tee, en lugar de
> cat?
Gracias, pero no me has entendido: cat es s�lo un ejemplo. Todo esto lo
quiero poner en pr�ctica con mplayer en modo "slave". Y a�n con todo, yo
no tengo ning�n problema con stdout, sino con stdin.
En cualquier caso explico lo que quiero hacer en realidad, a ver si os
hac�is mejor la idea:
Hace tiempo me hice un peque�o dialecto XML para almacenar informaci�n
sobre emisoras de radio que emiten por internet, de tal manera que me
permite almacenar tanto url fijas (p.e. los stream que emiten las radios
en vivo) como url que incluyen la fecha (p.e. el programa de radio de
hoy que no he podido escuchar esta ma�ana porque estaba trabajando y me
gusta mucho). Y para hacer uso de este XML me cre� un script de bash,
que a trav�s de xsltproc lee el XML y gracias a mplayer reproduce. Por
ejemplo:
$ radio rne1 # Reproduce Radio 1 de RNE
$ radio despertador # Reproduce la �ltima arenga matutina de Jim�nez
# Losantos. Si es lunes, la del lunes; si es
# s�bado, la del viernes, porque los s�bados no
# hay.
(Todo esto lo explico con tanto detalle, porque a m� me es muy �til y
si alguno est� interesado, le paso lo que he hecho)
Hecho esto, se me ocurri� que, dado que uso fvwm2 y este gestor soporta
men�s generados din�micamente, pod�a hacer otro script que a partir del
XML me generase una secci�n del men� de fvwm2 cuyas entradas sean
emisoras/programas de emisoras. Invocado convenientemente el script en
la configuraci�n del fvwm2, cuando entro en el men� y pincho encima de
una de las emisoras/programas de radio, se lanza el mplayer y reproduce.
Hasta aqu� todo bien. Si pincho en la entrada "rne1", se hable gmplayer y
comienza a reproducir el stream de radio. Sin embargo, tiene un peque�o
defecto. Si a continuaci�n decido escuchar Onda Cero, y me voy al men�,
se lanza otro gmplayer. As� que antes de elegir Onda Cero, tengo que
salir manualmente del gmplayer que reproduc�a Radio Nacional.
Y llego, por fin, al meollo. Ayer, consultando la p�gina del manual de
mplayer, descubr� la opci�n -slave y se me ocurri� que era la soluci�n al
defecto. Si arranco mplayer en una consola as�:
$ mplayer -slave -quiet url1
mplayer comienza a reproducir la url1, pero se queda esperando �rdenes
que se pueden introducir por stdin (como hace "cat", de ah� mi ejemplo).
As� si p. e. escribo:
l url2
mplayer deja de reproducir url1 y comienza a reproducir url2. Al leer
esto se me ocurri� que las entradas del men�, en vez de lanzar a tontas
y a locas mplayer, podr�an comprobar si hay ya un mplayer ejecut�ndose.
Si no lo hay, lo lanza con la opci�n "-slave"; y si lo hay, le pasa "l
url2". Ese es mi problema, �c�mo paso esa orden al mplayer en ejecuci�n?
Y esto me parece a m� equivalente a ejecutar en una consola "cat" y,
que sea capaz de escuchar flujos de datos que yo le env�e desde otros
programas. Por ejemplo, abro un xterm hago un:
$ echo "l url2" > redireccionado_a_la_entrada_de_cat
y "cat" muestra "l url2". Y a continuaci�n abro otra xterm y lanzo ls:
$ ls > redireccionado_a_la_entrada_de_cat
y 'cat' captura el contenido del directorio.
He llegado a pensar que esto quiz�s se puede hacer a trav�s de inetd o
algo por el estilo. A fin de cuentas se parece mucho a un programa que
est� escuchando en un puerto.
Muchas gracias por tu inter�s.
--
Dejemos metaf�sicas quimeras;
vuesas mercedes garlen en chacota:
que no est� el mundo para hablar de veras.
--- Tom� de Burguillos ---
Si Di�xido de Silicio | Debian GNU/Linux
/ \ (SiO2) | Jos� Miguel S�nchez Al�s
O O Mineral de Cuarzo | sio2.ARROB@online.fr | URL #257033
Re: [BASH] Mandar información a la salida estándar de un programa
Author: sio2
Date: Wed, 07 Sep 2005 20:42
Date: Wed, 07 Sep 2005 20:42
47 lines
2498 bytes
2498 bytes
El mi�, 07 de sep de 2005, a las 19:39 GMT, Gonzalo P�rez de Olaguer C�rdoba
escribi�:
>> En realidad no lo quiero para una cosa tan pueril como 'cat', sino para
>> usarlo con "mplayer -slave".
>
> tail(1) tiene una opci�n --follow que tal vez te sirva para algo
>
S�, es un poco chapuzas, pero s� me vale. Usado as�:
#v+
$ touch /tmp/mplayer_control
$ tail --follow=name /tmp/mplayer_control | mplayer -slave -quiet url1
#v-
As� comienza a reproducir mplayer url1.
Y ahora en otra consola, voy escribiendo en mplayer_control:
$ echo "l url2" >> /tmp/mplayer_control
[Escucho url2]
$ echo "l url3" >> /tmp/mplayer_control
[Escucho url3]
Y cuando estoy harto de escuchar la radio acabo mplayer y tail:
$ echo "q" >> /tmp/mplayer_control ; rm -f /tmp/mplayer_control
La �nica forma que he encontrado de que acabe tail es borrando el
fichero.
Curiosos. Jam�s se me habr�a ocurrido mirar el manual de tail para
resolver esto.
Muchas gracias. No parece una cosa muy elegante, pero funciona.
--
Hay dos sistemas de conseguir la felicidad: uno, hacerse
el idiota; otro, serlo.
--- Enrique Jardiel Poncela. --
Si Di�xido de Silicio | Debian GNU/Linux
/ \ (SiO2) | Jos� Miguel S�nchez Al�s
O O Mineral de Cuarzo | sio2.ARROB@online.fr | URL #257033
Re: [BASH] Mandar información a la salida estándar de un programa
Author: Benjamín Albiñana
Date: Wed, 07 Sep 2005 22:37
Date: Wed, 07 Sep 2005 22:37
31 lines
2379 bytes
2379 bytes
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Cuando: Wed, 7 Sep 2005 22:01:15 +0200 Quien: sio2 <sio2.ARROB@online.fr> Que: Re: [BASH] Mandar informaci�n a la salida est�ndar de un programa > He llegado a pensar que esto quiz�s se puede hacer a trav�s de inetd o > algo por el estilo. A fin de cuentas se parece mucho a un programa que > est� escuchando en un puerto. Aj�, entonces, voy a ser todav�a m�s atrevido y sin probar ni nada, decirte que eches un ojo a la opci�n -input, ya que el manual dice algo as� como: "archivo Lee comandos desde el archivo dado. Esto es mas util con un fifo. NOTA: Cuando el archivo especificado es un fifo MPlayer lo abre de manera que pueda hacer 'echo "seek 10" > mp_pipe' y el pipe sigue siendo valido." - -- Los dioses que sonrieron cuando naciste, ahora se est�n descojonando... -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFDH2uW633hg168lHwRAgg4AJ0RjpEE48e8cdT3MlOz/Kmid7OB3gCbBqpd qEtCyIBB1mhc4obOWZmuExQ= =O+yj -----END PGP SIGNATURE-----
Re: [BASH] Mandar información a la salida estándar de un programa
Author: sio2
Date: Wed, 07 Sep 2005 23:31
Date: Wed, 07 Sep 2005 23:31
31 lines
2194 bytes
2194 bytes
El mi�, 07 de sep de 2005, a las 22:37 GMT, Benjam�n Albi�ana escribi�:
> Aj�, entonces, voy a ser todav�a m�s atrevido y sin probar ni nada,
> decirte que eches un ojo a la opci�n -input, ya que el manual dice
> algo as� como:
Que en su arrogancia y sus vicios,
caballeresca apostura,
agilidad y bravura,
ninguno alcanza a igualar...
Que dec�a la versi�n extreme�a de OpenOffice.org (�o era abiword?)
Justo, justo.
> "archivo
> Lee comandos desde el archivo dado. Esto es mas util
No obstante, la versi�n espa�ola de la p�gina del manual de mplayer
(al menos de mi versi�n 1.0pre7-3.3.5 y esa parece que tambi�n) est�
equivocada. La sintaxis es file=archivo.
Arreglado, muchas gracias.
--
Fl�rida para m� dulce y sabrosa,
m�s que la fruta de cercado ajeno.
--- Garcilaso de la Vega ---
Si Di�xido de Silicio | Debian GNU/Linux
/ \ (SiO2) | Jos� Miguel S�nchez Al�s
O O Mineral de Cuarzo | sio2.ARROB@online.fr | URL #257033
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads