Kirim keluaran debug ke multiplekser terminal
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
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.