Exécuter la command dans le terminal actif distant

Supposons que vous ayez un émulateur de terminal (T1) ouvert avec un PID de 6350.

A partir d'un autre terminal, tapez cette command (C1):

echo "ls\n" > /proc/6350/fd/0 

Cela écrit ls et la nouvelle ligne dans T1 mais ne l'exécute pas. Pourquoi?

J'ai aussi essayé d'utiliser cat|bash avec echo "ls\n" > /proc/catid/fd/0 mais il n'est toujours pas exécuté.

Comment puis-je faire écho à la command dans un autre terminal et faire exécuter la command?

réponse possible:

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

Dans ce cas, vous ne pouvez plus écrire directement dans le terminal (tout est affiché de la même façon que la command (C1) affichée dans ce terminal.

Il existe un utilitaire de command line appelé ttyecho qui peut envoyer une command à un autre terminal (tty / pts) et faire exécuter la command.

 sudo ttyecho -n /dev/pts/5 ls 

Voir: Utilitaire pour envoyer des commands ou des données à d'autres terminaux (tty / pts)

Voir aussi: ttyecho code source sur github .

Une autre command tty intéressante est le selector , un gestionnaire de templates interactif en time réel dans la console qui met à jour le tampon d'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) 

Voir: sélecteur – RECHERCHE DYNAMIQUE DANS LA CONSOLE

Lorsque vous écrivez dans /dev/pts/X ( /proc/6350/fd/0 , 1 et 2 est juste un lien symbolique), ce qui se passe est exactement la même chose que le process 6350 (ou l'un de ses enfants, convenablement fourchus) produit quelque chose: il écrit au terminal.

Si vous essayez de lire à partir de cet appareil ( cat < /dev/pts/X ), des choses géniales se produiront. Vous devriez voir les choses que vous tapez dans le shell d'origine apparaissent. (Peut-être seulement après la première nouvelle ligne que vous avez tapée – je devine le programme terminal ( xterm ou ce que vous utilisez) fait un tampon de ligne et le shell 6350 qui a été bloqué en read obtient cette pièce, , ou pourrait ne pas gagner les lectures suivantes, mais je pourrais très bien me tromper complètement sur ceci.)

La chose est la suivante: lorsque vous lisez ou écrivez sur ce périphérique, vous ne parlez pas à l'autre shell qui l'utilise. Vous parlez à l'émulateur de terminal ( xterm par exemple). Seul l'émulateur de terminal peut injecter des données dans ce canal (ce que le shell lit), et tout ce que le shell écrit va au terminal. Attacher une deuxième coquille ne change pas cela.

Si vous voulez injecter des commands dans ce process 6530 , il faudra le faire via le terminal (que ce soit une application X11 ou quelque chose d'autre).

Lecture recommandée: Quelle est la différence exacte entre un «terminal», un «shell», un «tty» et une «console»?