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 lsy la nueva línea en T1 pero no la ejecuta. ¿Por qué?
También intenté usar cat|bashcon echo "ls\n" > /proc/catid/fd/0pero 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
ttyechoque 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:
ttyechocódigo fuente en github .Otro comando interesante de tty es
selectorun 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
ttyechocó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,1y2es 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 (xtermo lo que sea que esté usando) hace un búfer de línea, y el6350shell que estaba bloqueadoreadobtiene 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 (
xtermpor 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
6530proceso, 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/xno es necesario<), las letras se alternan estrictamente entre los terminales./proc/6350/fd/0es un enlace simbólico al stdin padre delprocess 6350cual es un terminal. ¿Supongo que es lo mismo para las aplicaciones con ventana?