Ejecutar el command en el terminal activo remoto

Supongamos que tiene un emulador de terminal (T1) abierto con un PID de 6350.

Desde otra terminal, escribe este command (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 aún no se ejecuta.

¿Cómo puedo repetir el command en otro terminal y ejecutar el command?

posible respuesta :

 $ mkfifo toto; $ bash < toto; $ echo "ls" > toto; 

En este caso, no puede escribir más directamente en el terminal (todo se muestra de la misma manera que el command (C1) que se muestra en este terminal.

Hay una utilidad de command-line llamada ttyecho que puede enviar un command a otro terminal (tty / pts) y ejecutar el command.

 sudo ttyecho -n /dev/pts/5 ls 

Ver: utilidad para enviar commands o datos a otros terminales (tty / pts)

Ver también: código fuente de ttyecho en github .

Otro command interesante de tty es selector , un marcador de patrón interactivo en time real en la console que actualiza el búfer de input tty.

 # selector examples selector -v -x @ <(find . -maxdepth 2 -type d | awk '{print $0"@cd "$0}') selector -v -x @ <(grep -E -o 'http[^ ]+' fileWithURLS) 

Ver: selector – BÚSQUEDA DINÁMICA EN CONSOLA

Cuando emite una escritura en /dev/pts/X ( /proc/6350/fd/0 , 1 y 2 es solo un enlace simbólico a eso), lo que sucede es exactamente lo mismo que sucede cuando el process 6350 (o uno de sus niños, adecuadamente bifurcados) produce algo: escribe en la terminal.

Si intentas leer desde ese dispositivo ( cat < /dev/pts/X ), sucederán cosas divertidas. Debería ver aparecer las cosas que escribe en el shell original. (Muy posiblemente solo después de la primera nueva línea que escribió, supongo que el progtwig de terminal ( xterm o lo que sea que esté usando) hace un buffering de línea, y el shell 6350 que fue bloqueado en read obtiene esa pieza; , o podría no, ganar las lecturas posteriores, pero podría estar completamente equivocado en esto).

La cosa es: cuando lees o escribes en ese dispositivo, no estás hablando con el otro intérprete de commands 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 insert commands en ese process 6530 , tendrá que hacerlo a través del terminal (ya sea una aplicación X11 u otra cosa).

Lectura recomendada: ¿Cuál es la diferencia exacta entre un 'terminal', un 'shell', un 'tty' y una 'console'?