Como enviar saída de um terminal para outro sem fazer nenhum novo pipe ou arquivo

23

Estou apenas brincando no meu terminal (terminal do Gnome). Eu queria saber se há uma maneira de enviar a saída de um terminal para outro sem ter que fazer um novo arquivo ou pipe.

por exemplo: no primeiro terminal executo ls e quero que sua saída seja exibida no segundo terminal (com ou sem qualquer comando no segundo)

    
por Edward Torvalds 11.02.2016 / 15:47

5 respostas

28

Se ambos os terminais pertencerem ao mesmo usuário, você poderá enviar sua saída para o dispositivo virtual que é usado como o tty do terminal em particular.

Assim, você pode usar a saída de w , que inclui as informações de TTY, e gravar diretamente nesse dispositivo.

ls > /dev/pts/7

(Se o dispositivo mencionado por w fosse pts / 7)

Outra opção é usar o número de um processo conectado a esse dispositivo. Envie sua saída para /proc/<process number>/fd/1 .

ls > /proc/5555/fd/1

Supondo que o número do processo encontrado que é executado nesse terminal é 5555.

Note que esta gravação direta só é permitida se o usuário que tenta escrever é o mesmo usuário que possui o outro terminal .

    
por 11.02.2016 / 16:05
14

Você pode usar o comando write .

Como @MelBurslan comentou, se a permissão de gravação estiver desativada, execute primeiro:

 $ mesg y

De man mesg

OPTIONS

y Allow write access to your terminal.

Uso de gravação:

$ write username tty

por exemplo. Envie ls output para outro 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
    
por 11.02.2016 / 15:56
7

Eu encontrei um método similar.

No primeiro terminal :

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

No segundo terminal :

$ ls > /dev/pts/0

Agora você obtém a saída no primeiro terminal

    
por 11.02.2016 / 16:32
4

Use o comando tty em cada terminal para identificá-los:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

Assumindo que esses TTYs redirecionam o primeiro do stdout para o segundo, execute-o no primeiro terminal:

exec 1>/dev/pts/1

Note: Now every command output will show on pts/1

Para restaurar o comportamento padrão stdout de pts / 0:

exec 1>/dev/pts/0

Veja este vídeo para uma demonstração.

    
por 29.09.2017 / 16:17
-3

Você também pode usar wall :

$ wall "Message here"
    
por 11.02.2016 / 16:07