Supongamos que tiene un emulador de terminal (T1) abierto con un PID de 6350.
Desde otro terminal, escriba este comando (C1):
echo "ls\n" > /proc/6350/fd/0
Esto escribe ls
y la nueva línea en T1 pero no la ejecuta. ¿Por qué?
También intenté usar cat|bash
con echo "ls\n" > /proc/catid/fd/0
pero todavía no se ejecuta.
¿Cómo puedo hacer eco del comando en otro terminal y ejecutar el comando?
posible respuesta :
$ mkfifo toto;
$ bash < toto;
$ echo "ls" > toto;
En este caso, no puede escribir más directamente en la terminal (todo se muestra de la misma manera que el comando (C1) muestra la cosa en esta terminal.
terminal
stdout
command
file-descriptors
rvlander
fuente
fuente
Respuestas:
Hay una utilidad de línea de comando llamada
ttyecho
que puede enviar un comando a otro terminal (tty / pts) y ejecutar el comando.Consulte: Utilidad para enviar comandos o datos a otros terminales (tty / pts)
Ver también:
ttyecho
código fuente en github .Otro comando interesante de tty es
selector
un comparador de patrones interactivo en tiempo real en la consola que actualiza el búfer de entrada tty.Ver: selector - BÚSQUEDA DINÁMICA EN CONSOLA
fuente
ttyecho
código fuente en github parece estar roto. Sin embargo, parece estar disponible en github.com/osospeed/ttyecho en su lugar, ahora.Cuando se emite una escritura en
/dev/pts/X
(/proc/6350/fd/0
,1
y2
es sólo un enlace simbólico a eso), lo que ocurre es exactamente lo mismo que ocurre cuando el proceso6350
(o uno de sus hijos, de manera adecuada en forma de tenedor) salidas de algo: se escribe en el terminal.Si intentas leer desde ese dispositivo (
cat < /dev/pts/X
), sucederán cosas funky. Debería ver aparecer las cosas que escribe en el shell original. (Muy posiblemente solo después de la primera línea nueva que escribió; supongo que el programa del terminal (xterm
o lo que sea que esté usando) hace un búfer de línea, y el6350
shell que estaba bloqueadoread
obtiene esa pieza; entonces puede que el shell o no, ganar las lecturas posteriores, pero bien podría estar completamente equivocado en esto).La cuestión es: cuando lees o escribes en ese dispositivo, no estás hablando con el otro shell que lo está usando. Estás hablando con el emulador de terminal (
xterm
por ejemplo). Solo el emulador de terminal puede inyectar datos en ese canal (lo que lee el shell), y todo lo que escribe el shell va al terminal. Adjuntar un segundo caparazón no cambia eso.Si desea inyectar comandos en ese
6530
proceso, tendrá que hacerlo a través del terminal (ya sea una aplicación X11 o alguna otra cosa).Lectura recomendada: ¿Cuál es la diferencia exacta entre un 'terminal', un 'shell', un 'tty' y una 'consola'?
fuente
cat /dev/pts/x
no es necesario<
), las letras se alternan estrictamente entre los terminales./proc/6350/fd/0
es un enlace simbólico al stdin padre delprocess 6350
cual es un terminal. ¿Supongo que es lo mismo para las aplicaciones con ventana?