web-dev-qa-db-fra.com

Comment envoyer la sortie d'un terminal à un autre sans créer de nouveau canal ou fichier

Je suis juste en train de jouer sur mon terminal (terminal Gnome). Je me demandais s'il y avait un moyen d'envoyer la sortie d'un terminal à un autre sans avoir à créer un nouveau fichier ou pipe.

par exemple: sur le premier terminal, j'exécute ls et je veux que sa sortie soit affichée sur le deuxième terminal (avec ou sans utilisation de commande sur le second)

28
Edward Torvalds

Si les deux terminaux appartiennent au même utilisateur, vous pouvez envoyer votre sortie au périphérique virtuel qui est utilisé comme terminal du terminal particulier.

Vous pouvez donc utiliser la sortie de w, qui inclut les informations TTY, et écrire directement sur ce périphérique.

ls > /dev/pts/7

(Si le périphérique mentionné par w était pts/7)

Une autre option consiste à utiliser le numéro d'un processus connecté à ce périphérique. Envoyez votre sortie à /proc/<process number>/fd/1.

ls > /proc/5555/fd/1

En supposant que le numéro de processus que vous avez trouvé qui s'exécute dans ce terminal est 5555.

Notez que cette écriture directe n'est autorisée que si l'utilisateur qui tente d'écrire est le même utilisateur qui possède l'autre terminal.

32
RealSkeptic

Vous pouvez utiliser la commande write.

Comme l'a commenté @MelBurslan, si l'autorisation d'écriture est désactivée, exécutez d'abord:

 $ mesg y

De man mesg

OPTIONS

y Autorisez l'accès en écriture à votre terminal.

Utilisation de l'écriture:

$ write username tty

par exemple. Envoyer la sortie ls vers un autre terminal.

$ w
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     :0       :0               08:15   ?xdm?   7:37   0.25s init --user
user     pts/0    :0               08:19    1.00s  0.09s  0.01s w
user     pts/12   :0               08:50   54.00s  0.03s  0.03s bash

$ ls | write username pts/12
15
tachomi

J'ai trouvé une méthode similaire.

Sur le premier terminal:

 $ tty
 /dev/pts/0
 $ <no need to run any command here, just see the output>

Sur le deuxième terminal:

$ ls > /dev/pts/0

Maintenant, vous obtenez la sortie sur le premier terminal

8
Edward Torvalds

Utilisez la commande tty dans chaque terminal pour les identifier:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

En supposant que ces ATS, pour rediriger la sortie standard du premier vers le second, exécutez ceci dans le premier terminal:

exec 1>/dev/pts/1

Remarque: Maintenant chaque sortie de commande apparaîtra sur pts/1

Pour restaurer le comportement par défaut stdout de pts/0:

exec 1>/dev/pts/0

Voir cette vidéo pour une démonstration.

5
Vitalie Ghelbert

vous pouvez écrire sur le TTY du terminal; par exemple:

dans le terminal 1:

$ tty 
ttys000

dans la borne 2:

$ tty
ttys029

$ exec &> >(tee >(cat >&/dev/ttys000))
ls 

La sortie s'affichera dans les deux terminaux en temps réel, même lorsque vous tapez.

Fonctionne sur linux et macOS. Le chemin d'accès macOS TTY est /dev/{number} sous Linux c'est /dev/pts/{number}

0
Miguel Mota