Cara mengirim output dari satu terminal ke terminal lain tanpa membuat pipa atau file baru


26

Saya hanya bermain-main di terminal saya (terminal Gnome). Saya bertanya-tanya apakah ada cara untuk mengirim output dari satu terminal ke terminal lain tanpa harus membuat file atau pipa baru.

misalnya: pada terminal pertama saya jalankan lsdan ingin outputnya ditampilkan pada terminal kedua (dengan atau tanpa menggunakan perintah apa pun pada detik)


apa yang kamu punya? Apakah kamu mencoba sesuatu? Bisakah Anda memberikan beberapa contoh?
tachomi

@ Tomomi pada terminal pertama saya jalankan lsdan ingin outputnya ditampilkan di terminal kedua (dengan atau tanpa menggunakan perintah apa pun di kedua)
Edward Torvalds

Jawaban:


30

Jika kedua terminal milik pengguna yang sama, Anda dapat mengirim output Anda ke perangkat virtual yang digunakan sebagai terminal tty tertentu.

Jadi, Anda dapat menggunakan output dari w, yang mencakup informasi TTY, dan menulis langsung ke perangkat itu.

ls > /dev/pts/7

(Jika perangkat yang disebutkan oleh wpts / 7)

Pilihan lain adalah menggunakan jumlah proses yang terhubung ke perangkat itu. Kirim output Anda ke /proc/<process number>/fd/1.

ls > /proc/5555/fd/1

Dengan asumsi nomor proses yang Anda temukan yang berjalan di terminal itu adalah 5555.

Perhatikan bahwa penulisan langsung ini hanya diperbolehkan jika pengguna yang mencoba menulis adalah pengguna yang sama yang memiliki terminal lain .


Saya tidak mendapatkan /dev/pts/7atau serupa dengan wperintah, tetapi cara kedua bekerja untuk saya
Edward Torvalds

2
@edwardtorvalds /proc/XXX/fd/1Biasanya berupa tautan lunak ke perangkat dasar. Coba gunakan ls -l /proc/XXXX/fd/1dan lihat apa maksudnya. Apakah ada kaitannya dengan apa yang muncul dalam wperintah?
RealSkeptic

Saya tidak berhubungan wperintah dengan /proc/XXX/fd/0saya berhubungan wperintah dengan/dev/pts/7
Edward Torvalds

4
@edwardtorvalds Saya mengatakan bahwa mereka terhubung seperti /proc/XXX/fd/1yang seharusnya menjadi tautan lunak ke perangkat apa pun yang wditampilkan perintah. Apa hasil dari ls -litu?
RealSkeptic

Informasi TTY juga dapat ditemukan dalam output dari tty(hanya saat ini) atau who(semua).
Nick Volynkin

14

Anda bisa menggunakan writeperintah.

Seperti yang dikomentari @MelBurslan, jika izin tulis tidak aktif, jalankan terlebih dahulu:

 $ mesg y

Dari man mesg

PILIHAN

y Izinkan akses tulis ke terminal Anda.

Penggunaan menulis:

$ write username tty

mis. Kirim lsoutput ke terminal lain.

$ 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

di lengkungan linux, di terminal gnome, output dari wperintah adalah edward tty2 19:53 6:05 2:48 23.12s firefoxdan jika saya menulis ls | write edward tty2saya tidak mendapatkan output selain suara bip
Edward Torvalds

@edwardtorvalds Anda merilis edwarddbukan yang Anda ketik edward?
tachomi

juga jika saya mencobanya di tty5 (ctrl + alt + 5) Saya mendapatkan kesalahanyou have turned write permission off
Edward Torvalds

itu kesalahan pengetikan di situs ini
Edward Torvalds

coba mesg yperintah pada terminal target, sebelum Anda menjalankan perintah
MelBurslan

7

Saya menemukan metode serupa.

Di terminal pertama :

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

Di terminal kedua :

$ ls > /dev/pts/0

Sekarang Anda mendapatkan output di terminal pertama


1
tail -fbukannya catbisa berguna
tachomi

3
@ Tomomi sebenarnya tidak perlu perintah untuk membaca output
Edward Torvalds

4

Gunakan ttyperintah di setiap terminal untuk mengidentifikasi mereka:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

Dengan asumsi TTY ini, untuk mengarahkan stdout pertama ke yang kedua, jalankan ini di terminal pertama:

exec 1>/dev/pts/1

Catatan: Sekarang setiap output perintah akan ditampilkan di pts / 1

Untuk mengembalikan stdout perilaku default dari Poin / 0:

exec 1>/dev/pts/0

Lihat video ini untuk demonstrasi.


jawaban ini juga bagus
Edward Torvalds

0

Anda dapat menulis ke TTY terminal; sebagai contoh:

di terminal 1:

$ tty 
ttys000

di terminal 2:

$ tty
ttys029

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

Output akan ditampilkan di kedua terminal secara real-time bahkan saat Anda mengetik.

Bekerja di linux dan macOS. Path macOS TTY adalah /dev/{number}sementara di Linux itu/dev/pts/{number}


mengeksekusi exec &> >(tee >(cat >&/dev/ttys000))tidak ada, sehingga tidak mungkin untuk mengetik.
Edward Torvalds

@EdwardTorvalds di linux ttyakan menjadi sesuatu seperti/dev/pts/0
Miguel Mota

ya, itulah yang saya gunakan untuk menguji kode Anda
Edward Torvalds

@ EdwardTorvalds perintah apa yang tidak ada?
Miguel Mota

perintahmu exec &> >(tee >(cat >&/dev/pts/1)). Tidak ada kombinasi tombol kontrol (ctrl + c) yang berfungsi. Saya harus membunuh terminal untuk keluar
Edward Torvalds

-3

Anda walljuga dapat menggunakan :

$ wall "Message here"

Anda mungkin ingin menjelaskannya secara rinci. Saya tidak mengerti apa-apa dari ini
Edward Torvalds

3
Anda pasti tidak ingin menggunakan wall(kependekan dari "write all"), karena menulis untuk setiap sesi tty masuk, termasuk yang Anda kirim. Sebaliknya, menggunakan writememungkinkan tty spesifik untuk dideklarasikan.
Monty Harder
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.