bagaimana cara memasukkan nama sesi layar dalam hardstatus?


17

Saya menggunakan sesi layar yang berbeda untuk proyek yang berbeda. Mulai dari layar screen -S project1. Sekarang, saya ingin menyebutkan 'project1' di baris hardstatus.

Nama sesi dapat diperoleh dari lingkungan variabel STY: STY=13539.project1.
Tetapi bagaimana cara memasukkan ini ke layar? Saya sudah mencoba perintah backtick dan% `dalam hardstatus, tapi sepertinya saya tidak bisa melakukannya dengan benar.

Apa yang saya lakukan:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

tidak berhasil, kosong% `.

backtick 0 30 30 sessionname

masih tidak berhasil, nama sesi: Tidak ditemukan

Jawaban:


18

Anda dapat memasukkan string ini (dengan informasi tambahan, jika diinginkan) di $PS1:

\[\e]0;$STY\007

di dalam tanda kutip tunggal untuk menunda evaluasi variabel. Kemudian tambahkan ini ke ~/.screenrc:

hardstatus string '%H:%h'

Sayangnya, screentidak diatur $STYdalam lingkungan perintah yang dimunculkan untuk backtickfitur tersebut.

Pilihan lain, bukan yang di atas:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

Keuntungan dari yang satu ini adalah bahwa ia mengikuti perubahan yang dibuat dengan menggunakan sessionnameperintah. Opsi pertama tidak.

Edit:

Dari sini :

Karena $ STY belum disetel saat sumber layar .screenrc, Anda dapat menggunakan trik ini di .screenrc Anda:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

Yaitu mengirim perintah layar ke jendela pertama.


1
Untuk solusi yang dimulai dengan backtick: (1.) apakah backtickbash builtin? perintah gnu-screen? executable biner? apakah ada halaman manual? (2.) Saya tahu ini berhasil karena saya sudah mencobanya tetapi bagaimana Anda mendapatkan dua baris perintah untuk mengeksekusi ketika sepertinya .screenrcsintaks layar gnu memerlukan satu baris untuk hardstatusperintah? (3.) bagaimana saya akan memodifikasi perintah Anda untuk memungkinkan menambahkan beberapa teks setelah nama sesi?
Trevor Boyd Smith

@TrevorBoydSmith: backtickadalah sebuah screenperintah. Cari di halaman manual untuk screen. Mungkin lebih baik jika Anda memposting pertanyaan baru mengenai sisa dari apa yang Anda tanyakan. Saya tidak berpikir output hardstatus dapat menempati dua baris di layar. Anda dapat menggunakan sedatau awkbukannya grepmelakukan apa grepyang dilakukan dalam contoh saya dan juga menambahkan beberapa teks tambahan.
Dijeda sampai pemberitahuan lebih lanjut.

Ketika saya mengatakan "dua baris" biarkan saya menyatakan kembali apa yang saya maksud, saya tidak ingin tampilan dua baris untuk hardstatus. Saya bingung dengan %` dan backtickberada di baris yang terpisah ... mereka tidak terlihat terkait tetapi sekarang saya membaca dokumentasi untukbacktick saya melihat bahwa keduanya terkait / perlu / valid-sintaks (meskipun sintaksis IMO agak aneh).
Trevor Boyd Smith

3

Bagi saya ini dengan mudah bekerja dengan memasukkan %Sdi hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Namun, ini menampilkan nama sesi tanpa ID (seperti ${STY#*.}); dalam contoh Anda: project1.

(Jawaban yang sama untuk pertanyaan lain di sini dan di sini untuk kelengkapan).


2
FYI, "% S" berfungsi pada versi gnu-screen yang lebih baru (berfungsi pada versi Fedora 21 untuk saya) tetapi tidak untuk versi yang lebih lama (tidak berfungsi pada versi CentOS 6 untuk saya).
Trevor Boyd Smith
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.