Kirim keluaran debug ke multiplekser terminal

Nov 01 2020

Dengan adanya skrip shell (bash dalam contoh ini), seseorang dapat menggunakan set -xatau -xditeruskan ke bash atau shell pendukung lainnya untuk menghasilkan keluaran debug.

Saya tahu cara mengarahkan output tersebut ke file ./script.sh 2> out.logatau bash -x script.sh 2> out.log.

Tetapi bagaimana cara mengirim stderr ke terminal multiplexer, seperti screenatau tmux?

Terutama berguna ketika skrip mengubah cara terminal ditampilkan (TUI), jadi pengiriman stderr memungkinkan debugging yang lebih nyaman di jendela / terminal lain.

Jawaban

2 KamilMaciorowski Nov 01 2020 at 03:21

Panggil ttydi terminal tempat Anda ingin mengirim sesuatu. Ini akan mencetak misalnya /dev/pts/3Kemudian redirect apapun yang Anda inginkan ke file ini, mungkin dari terminal lain. Seperti ini:

bash -x script.sh 2> /dev/pts/3

Ini bekerja dengan tmux,, screenemulator terminal atau ttys terpisah (tempat Anda login). Panggil ttydalam satu shell dan alihkan / cetak ke apa pun yang dikatakannya dari yang lain.

Saya menggunakan pendekatan serupa untuk men-debug pipeline saya. Contoh:

foo | tee /dev/pts2 | filter1 | tee /dev/pts3 | filter2

Perintah tmux display '#{pane_tty}'akan mencetak /dev/pts/3atau lebih di baris status. Ini berguna jika tidak ada shell di panel target (jadi Anda tidak bisa menjalankannya dengan mudah tty). Pilih panel jadi sekarang, tekan prefix:, ketik perintah dan Enter.