Solo estoy jugando en mi terminal (terminal Gnome). Me preguntaba si hay una manera de enviar la salida de un terminal a otro sin tener que hacer un nuevo archivo o tubería.
por ejemplo: en el primer terminal ejecuto ls
y quiero que su salida se muestre en el segundo terminal (con o sin usar ningún comando en el segundo)
command-line
Edward Torvalds
fuente
fuente
ls
y quiero que su salida se muestre en la segunda terminal (con o sin usar ningún comando en la segunda)Respuestas:
Si ambos terminales pertenecen al mismo usuario, puede enviar su salida al dispositivo virtual que se utiliza como tty del terminal en particular.
Entonces puede usar la salida de
w
, que incluye la información de TTY, y escribir directamente en ese dispositivo.(Si el dispositivo mencionado por
w
era pts / 7)Otra opción es usar el número de un proceso que está conectado a ese dispositivo. Envíe su salida a
/proc/<process number>/fd/1
.Suponiendo que el número de proceso que encontró que se ejecuta en ese terminal es 5555.
Tenga en cuenta que esta escritura directa solo se permite si el usuario que intenta escribir es el mismo usuario que posee el otro terminal .
fuente
/dev/pts/7
o similar con elw
comando, pero la segunda forma funciona para mí/proc/XXX/fd/1
es generalmente un enlace suave al dispositivo base. Intente usarls -l /proc/XXXX/fd/1
y vea a qué apunta. ¿Tiene alguna relación con lo que apareció en elw
comando?w
comando con/proc/XXX/fd/0
Estoy relacionando elw
comando con/dev/pts/7
/proc/XXX/fd/1
se supone que es un enlace suave a cualquier dispositivo quew
muestre el comando. ¿Cuál es el resultado dels -l
esto?tty
(solo actual) owho
(todos).Puedes usar el
write
comando.Como comentó @MelBurslan, si el permiso de escritura está desactivado, primero ejecute:
Desde
man mesg
Uso de escritura:
Por ejemplo, enviar
ls
salida a otro terminal.fuente
w
comando esedward tty2 19:53 6:05 2:48 23.12s firefox
y si escribols | write edward tty2
no obtengo más que un pitidoedwardd
lugar deedward
?you have turned write permission off
mesg y
comando en la terminal de destino, antes de ejecutar el comandoEncontré un método similar.
En la primera terminal :
En la segunda terminal :
Ahora obtienes la salida en la primera terminal
fuente
tail -f
en lugar decat
podría ser útilUse el
tty
comando en cada terminal para identificarlos:Suponiendo estos TTY, para redirigir el stdout del primero al segundo, ejecute esto en el primer terminal:
Para restaurar el comportamiento predeterminado stdout de pts / 0:
Vea este video para una demostración.
fuente
puedes escribir en el terminal TTY; por ejemplo:
en la terminal 1:
en la terminal 2:
La salida se mostrará en ambos terminales en tiempo real, incluso mientras escribe.
Funciona en linux y macOS. La ruta TTY de macOS es
/dev/{number}
mientras que en Linux es/dev/pts/{number}
fuente
exec &> >(tee >(cat >&/dev/ttys000))
no existe, por lo que es imposible escribir.tty
será algo así/dev/pts/0
exec &> >(tee >(cat >&/dev/pts/1))
. No funciona la combinación de teclas de control (ctrl + c). Tengo que matar la terminal para salirPuedes usar
wall
también:fuente
wall
(abreviatura de "escribir todo"), ya que escribe en cada sesión tty iniciada, incluida la que está enviando. En cambio, el usowrite
permite que se declare un tty específico.