Herhangi bir yeni boru veya dosya yapmadan bir terminalden diğerine çıktı gönderme


26

Ben sadece terminalimde dalga geçiyorum (Gnome terminali). Yeni bir dosya veya boru oluşturmak zorunda kalmadan bir terminalin diğerine çıktı göndermenin bir yolu olduğunu merak ediyordum.

örneğin: ilk terminalde çalıştırıyorum lsve çıktısının ikinci terminalde gösterilmesini istiyorum (ikinci bir komut kullanılmadan veya kullanılmadan)


neye sahipsin? Bir şey mi denedin? Bazı örnekler verebilir misiniz?
tachomi

ilk terminalde @tachomi Ben koşuyorum lsve çıktısının ikinci terminalde gösterilmesini istiyorum (ikincisinde herhangi bir komut kullanılmadan veya kullanılmadan)
Edward Torvalds

Yanıtlar:


30

Her iki terminal de aynı kullanıcıya aitse, çıktınızı belirli bir terminalin tty'si olarak kullanılan sanal cihaza gönderebilirsiniz.

Böylece wTTY bilgilerini içeren çıktısını kullanabilir ve doğrudan bu cihaza yazabilirsiniz.

ls > /dev/pts/7

(Eğer belirtilen cihaz wpts / 7 ise)

Başka bir seçenek, bu cihaza bağlı bir işlem sayısını kullanmaktır. Çıktınızı adresine gönderin /proc/<process number>/fd/1.

ls > /proc/5555/fd/1

Bu terminalde çalıştığını belirlediğiniz işlem numarasının 5555 olduğunu varsayalım.

Bu doğrudan yazmaya, yalnızca yazmaya çalışan kullanıcı diğer terminale sahip olan kullanıcıysa izin verilir .


Alamadım /dev/pts/7ya da wemirle benzerlik duymuyorum, ama ikinci yol benim için çalışıyor
Edward Torvalds

2
@ edwardtorvalds /proc/XXX/fd/1Genellikle, temel cihaza yumuşak bir bağlantıdır. Kullanmayı deneyin ls -l /proc/XXXX/fd/1ve neye işaret ettiğini görün. Komutta görünenlerle herhangi bir ilişkisi var mı w?
RealSkeptic

Ben ilgili değilim wile komutu /proc/XXX/fd/0Ben ilişkin am wile komutu/dev/pts/7
Edward Torvalds

4
@ edwardtorvalds Komutun /proc/XXX/fd/1gösterdiği her cihaza yumuşak bir bağlantı olması gerektiği gibi bağlandıklarını söylüyorum w. Bunun çıktısı nedir ls -l?
RealSkeptic

TTY bilgileri çıktıda tty(sadece güncel) veya who(tümü) de bulunabilir.
Nick Volynkin

14

writeKomutu kullanabilirsiniz .

@MelBurslan'ın dediği gibi, yazma izni kapalıysa, ilk önce şu komutu çalıştırın:

 $ mesg y

itibaren man mesg

SEÇENEKLER

y Terminalinize yazma erişimine izin verin.

Yazma Kullanımı:

$ write username tty

Örn: lsçıkışı diğer terminale gönder .

$ 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

arch linux, gnome terminalinde wkomutun çıktısı edward tty2 19:53 6:05 2:48 23.12s firefoxve eğer ls | write edward tty2
yazarsam

@ edwardtorvalds Sizi yazmak edwarddyerine bıraktınız edwardmı?
tachomi

ayrıca tty5 üzerinde denerseniz (ctrl + alt + 5) Hata alıyorumyou have turned write permission off
Edward Torvalds

Bu sitede yazarak hata oldu
Edward Torvalds

mesg yKomutu çalıştırmadan önce hedef terminalde komutu deneyin
MelBurslan

7

Benzer bir yöntem buldum.

İlk terminalde :

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

İkinci terminalde :

$ ls > /dev/pts/0

Şimdi çıktıyı ilk terminalden alıyorsunuz


1
tail -fyerine catyararlı olabilir
tachomi

3
@tachomi aslında çıktıyı okumak için herhangi bir komuta gerek yok
Edward Torvalds

4

ttyTanımlamak için her terminaldeki komutu kullanın :

$ tty
/dev/pts/0

$ tty
/dev/pts/1

Bu TTY'lerin varsayıldığı gibi, ilkin stdout'unu ikinciye yönlendirmek için, bunu ilk terminalde çalıştırın:

exec 1>/dev/pts/1

Not: Şimdi her komut çıkışı pts / 1 ile gösterilecektir.

Pts / 0'ın varsayılan davranışını geri yüklemek için:

exec 1>/dev/pts/0

Bir gösteri için bu videoya bakın .


Bu cevap da iyidir
Edward Torvalds

0

Terminalin TTY'sine yazabilirsiniz; Örneğin:

terminal 1'de:

$ tty 
ttys000

terminal 2'de:

$ tty
ttys029

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

Çıktı, yazdığınız her iki terminalde gerçek zamanlı olarak gösterilecektir.

Linux ve macOS'ta çalışır. MacOS TTY yolu /dev/{number}Linux'ta iken/dev/pts/{number}


yürütme exec &> >(tee >(cat >&/dev/ttys000))mevcut değil, yazmayı imkansız hale getiriyor.
Edward Torvalds

Linux üzerinde @EdwardTorvalds ttygibi bir şey olacak/dev/pts/0
Miguel Mota

evet, kodunuzu test etmek için kullandığım buydu
Edward Torvalds

@EdwardTorvalds hangi komut mevcut değil?
Miguel Mota

senin emrin exec &> >(tee >(cat >&/dev/pts/1)). Kontrol tuşu kombinasyonu (ctrl + c) çalışmıyor. Çıkmak için terminali öldürmek zorundayım
Edward Torvalds

-3

wallAyrıca kullanabilirsiniz :

$ wall "Message here"

detaylı olarak açıklamak isteyebilirsiniz. Bundan hiçbir şey anlamadım
Edward Torvalds

3
Kesinlikle yok değil kullanım istediğiniz wallher oturum açmış için tty oturumunda, aralarından yolluyoruz da dahil olmak üzere yazdığı gibi, (kısa "Tüm bilgileri" için). Bunun yerine, writebelirli bir tty'nin bildirilmesine izin verir.
Monty Harder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.