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)
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.
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
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
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.
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}