Estou apenas brincando no meu terminal (terminal Gnome). Fiquei me perguntando se existe uma maneira de enviar a saída de um terminal para outro sem ter que criar um novo arquivo ou canal.
por exemplo: no primeiro terminal, corro ls
e quero que sua saída seja exibida no segundo terminal (com ou sem usar qualquer comando no segundo)
command-line
Edward Torvalds
fonte
fonte
ls
e quer a sua saída para ser exibido em segundo terminal (com ou sem utilizar qualquer comando no segundo)Respostas:
Se os dois terminais pertencerem ao mesmo usuário, você poderá enviar sua saída para o dispositivo virtual usado como o tty do terminal específico.
Portanto, você pode usar a saída de
w
, que inclui as informações TTY, e gravar diretamente nesse dispositivo.(Se o dispositivo mencionado por
w
era pts / 7)Outra opção é usar o número de um processo conectado ao dispositivo. Envie sua saída para
/proc/<process number>/fd/1
.Supondo que o número do processo que você encontrou que é executado nesse terminal seja 5555.
Observe que essa gravação direta é permitida apenas se o usuário que tentar gravar for o mesmo usuário que possui o outro terminal .
fonte
/dev/pts/7
ou similar comw
comando, mas segunda maneira funciona para mim/proc/XXX/fd/1
Geralmente é um link direto para o dispositivo base. Tente usarls -l /proc/XXXX/fd/1
e veja o que está apontando. Tem alguma relação com o que apareceu now
comando?w
comando com/proc/XXX/fd/0
Estou relatandow
comando com/dev/pts/7
/proc/XXX/fd/1
deveria ser um link para qualquer dispositivo que ow
comando exibir. Qual é a saídals -l
dele?tty
(somente atual) ouwho
(todos).Você pode usar o
write
comandoComo o @MelBurslan comentou, se a permissão de gravação estiver desativada, primeiro execute:
A partir de
man mesg
Uso de gravação:
por exemplo, envie a
ls
saída para outro terminal.fonte
w
comando éedward tty2 19:53 6:05 2:48 23.12s firefox
e se eu escreverls | write edward tty2
fico sem saída, mas um sinal sonoroedwardd
vez deedward
?you have turned write permission off
mesg y
comando no terminal alvo, antes de executar o comandoEu encontrei um método semelhante.
No primeiro terminal :
No segundo terminal :
Agora você obtém a saída no primeiro terminal
fonte
tail -f
ao invés decat
poderia ser útilUse o
tty
comando em cada terminal para identificá-los:Supondo que esses TTYs, para redirecionar o stdout do primeiro para o segundo, execute isso no primeiro terminal:
Para restaurar o comportamento padrão stdout de pts / 0:
Veja este vídeo para uma demonstração.
fonte
você pode escrever no TTY do terminal; por exemplo:
no terminal 1:
no terminal 2:
A saída será exibida nos dois terminais em tempo real, enquanto você digita.
Funciona em linux e macOS. O caminho do macOS TTY é
/dev/{number}
enquanto no Linux é/dev/pts/{number}
fonte
exec &> >(tee >(cat >&/dev/ttys000))
não existe, impossibilitando a digitação.tty
será algo como/dev/pts/0
exec &> >(tee >(cat >&/dev/pts/1))
. Nenhuma combinação de teclas de controle (ctrl + c) funciona. Eu tenho que matar o terminal para sairVocê
wall
também pode usar :fonte
wall
(abreviação de "write all"), como ele grava em todas as sessões tty logadas, incluindo a que você está enviando. Em vez disso, o usowrite
permite que um tty específico seja declarado.