Bagaimana saya tahu saya sedang menjalankan di dalam "layar" linux atau tidak?

60

"Layar" merujuk ke program yang disebutkan dalam Cara menyambung kembali ke sesi ssh terputus . Itu fasilitas yang bagus.

Tapi ada pertanyaan yang ingin saya ketahui. Bagaimana saya tahu apakah saya menjalankan di dalam "layar"? Perbedaannya adalah:

  • Jika ya, saya tahu saya dapat dengan aman menutup jendela terminal saat ini, misalnya, menutup jendela Putty, tanpa kehilangan sesi shell (Bash dll).
  • Jika tidak, saya tahu saya harus mengurus semua pekerjaan yang tertunda sebelum saya menutup jendela terminal.

Lebih baik, saya ingin status ini ditampilkan di PS1 prompt sehingga saya bisa melihatnya kapan saja secara otomatis.

Jimm Chen
sumber
3
Jika Anda menggunakan tmux sebagai ganti layar, Anda mendapatkan bilah status kecil secara default. Mereka hampir sama untuk penggunaan dasar.
Samuel Edwin Ward
9
Tempatkan totem Anda di atas meja, dan biarkan berputar. Jika terus berputar, Anda baik-baik saja. Jika tidak, Anda ada di layar:]
Konerak
Anda juga dapat menggunakan byobu dengan layar dan tmux. Ini dapat diatur untuk memuat secara otomatis saat masuk dan kemudian menekan tombol F6 terputus dan keluar.
mp3foley
Kemungkinan duplikat dari Bagaimana cara memeriksa apakah saya di sesi layar?
Andrew Schulman

Jawaban:

88

(Dicuri dari " Bagaimana saya bisa tahu apakah saya ada di layar? " Di StackOverflow dan ditulis oleh pengguna jho . PS Anda tidak dapat memilih duplikat di seluruh situs StackExchange.)

Periksa $STY. Jika nol, Anda berada di terminal "nyata". Jika berisi apa pun, itu adalah nama layar tempat Anda berada.

Jika Anda tidak di layar:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

Jika Anda berada di layar:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Jika Anda menggunakan tmux sebagai ganti layar, periksa juga $TMUX. Untuk menambahkan ini ke prompt Anda, tambahkan berikut ini ke Anda ~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
Wesley
sumber
2
jika Anda menjalankan sesuatu via sudodefault tidak akan mewarisi variabel lingkungan, termasuk $STY. Tapi ini biasanya disebarkan ke lingkungan sudo, jadi mungkin memeriksa baik atau$TERM $STY $TERM=="screen"
rcoup
14

Cari $STYyang menyediakan detail yang screendigunakan untuk berkomunikasi dengan dirinya sendiri; $WINDOWmaka akan menjadi screennomor jendela saat ini .

geekosaurus
sumber
13

Pemeriksaan sederhana yang biasanya saya gunakan adalah dengan menekan Ctrl- a:

  • Jika kursor melompat ke awal baris , saya tidak berada di dalam sesi layar.

  • Jika tidak ada yang terjadi , saya tahu bahwa saya ada di dalam sesi layar dan saya baru saja menggunakan tombol kontrol layar. Saya kemudian tekan a(lompat ke awal baris), w(tampilkan jendela layar saat ini) atau jalankan perintah layar "tidak berbahaya" lainnya untuk kembali ke command prompt.

(Tentu saja, ini hanya berfungsi jika Anda sedang menjalankan bash atau perangkat lunak lain yang "melompat ke awal baris" atau melakukan sesuatu yang sama sekali tidak berbahaya ketika menekan Ctrl-a.)

Heinzi
sumber
3
Ini hanya berfungsi jika kunci kontrol layar Anda dibiarkan pada Ctrl-a default, tentu saja.
ShreevatsaR
1
menekan tombol kontrol + DD akan melepaskan dan menghentikan ssh. Anda dapat menekan kombinasi itu untuk kenyamanan lebih
akostadinov
Meskipun jawabannya baik untuk pertanyaan aktual, metode ini tidak dapat skrip.
Nikodemus RIP
7

Yah, sebagian besar waktu (absen seseorang berusaha mengacaukan sesuatu) Anda TERMakan diatur ke screen(atau setidaknya menyebutkan screensuatu tempat).

Solusi mudah untuk masalah ini hanya menjalankan layar di mana-mana. Jangan tinggalkan rumah tanpa itu, kataku.

womble
sumber
$TERMjuga biasanya menyebar melalui sudo, yang merupakan nilai tambah!
rcoup
7

Saya menyimpan ini di .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

Ini tidak mudah, tetapi setiap kali saya membuat layar baru, ia menempatkan nomor jendela di prompt. Jika saya tidak berlari screen, tidak ada nomor.

Josh
sumber
3

Saya punya cara yang lebih keren.

Tambahkan berikut ini ke ~ / .screenrc Anda dan Anda akan melihat baris status di bagian bawah (menunjukkan dalam teks terbalik tanggal, waktu dan beban sistem. Kode melarikan diri lebih banyak ditemukan di tautan halaman manual di bawah ini.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

Sumber ini ketika dalam sesi layar dengan ctrl-a:source ~/.screenrc.

Saya harus berterima kasih kepada Kyle Rankin dari Linux Journal untuk ini. Lihat artikelnya yang fantastis di http://www.linuxjournal.com/article/10950 . Bagian halaman manual yang dia maksud dapat ditemukan di http://www.gnu.org/software/screen/manual/screen.html#String-Escapes .

HankCa
sumber
2

Anda juga dapat mengulangi pohon proses dari $$untuk melihat apakah Anda menemukan contoh layar. rantai yang tepat mungkin akan tergantung pada pengaturan Anda - pada kotak OS X saya, zshlayar bagian dalam memiliki loginsebagai induknya, SCREENsebagai kakek neneknya, dan screensebagai kakek buyutnya.

Aaron Davies
sumber