Tulis perintah di satu terminal, lihat hasilnya di terminal lain

35

Saya ingin menjalankan perintah foo di satu terminal dan meneruskan hasilnya ke terminal lain. Apakah mungkin melakukan ini?

Mohammad Reza Rezwani
sumber
4
Lihat juga tmux dan layar , yang keduanya memungkinkan Anda untuk mengambil alih, mirror, atau hanya menjalankan perintah pada, sesi lain.
Kevin

Jawaban:

46

Ya itu. Sebuah gambar yang bernilai ribuan kata:

terminal radu

Jadi, Anda harus mengarahkan output dari perintah Anda menggunakan >operator ke /dev/pts/#. Anda dapat menemukan #menggunakan whoatau wperintah. Jika tou ingin mengarahkan dan kesalahan, gunakan:

<command> >& /dev/pts/#
Radu Rădeanu
sumber
Terima kasih. tetapi jika terminal lain tidak ada. apa yang harus kita lakukan? Atau lebih baik untuk mengatakan meneruskannya ke yang lebih baru?
Mohammad Reza Rezwani
5
Anda mungkin memerlukan skrip untuk melakukan itu: skrip akan mengambil sebagai argumen perintah Anda kemudian harus membuka yang baru gnome-terminaldan mendeteksi tty (menggunakan ttyperintah) dari terminal baru dan akhirnya mengirim output ke sana.
Radu Rădeanu
8

Sesuatu seperti ini untuk Anda $HOME/.bashrc:

ng() { gnome-terminal -x sh -c "$*; bash"; }

Ini akan menjalankan perintah dan menunjukkan hasilnya pada jendela terminal baru.

Contoh:

ng ls -l
ng echo foo

Sunting: Untuk mempertimbangkan alias dari $HOME/.bashrcpenggunaan ini sebagai gantinya:

ng() { gnome-terminal -x bash -ic "$*; bash"; }

maka output dari lsharus diwarnai (terima kasih kepada Radu Rădeanu untuk petunjuk ini ).

TuKsn
sumber
Ini akan menjalankan perintah langsung di terminal baru.
Radu Rădeanu
Ya tapi apa untungnya menjalankannya terlebih dahulu di terminal lama?
TuKsn
Tidak ada keuntungan ..., tetapi sebenarnya jawaban ini untuk komentar ini .
Radu Rădeanu
4
Anda akan mengerti jika Anda akan menjalankan type lsdan kemudian ng type ls:)
Radu Rădeanu
1
jika menulis fungsi dalam satu baris dalam bashrc, mungkin perlu titik koma untuk mengakhirinya, atau Anda akan menemukan kesalahan "akhir file yang tidak terduga". jadi ng() { gnome-terminal -x sh -c "$*; bash" ;}harus lebih baik. Dan jika Anda menggunakan xfce (xfce4-terminal sebagai emulator default): ng() { xfce4-terminal -x sh -c "$*; bash" ;}atau Anda dapat menjalankannya dengan emulator default apa punng() { x-terminal-emulator -x sh -c "$*; bash";}