Apakah mungkin dalam skrip untuk mengetahui apakah skrip dijalankan dari dalam layar GNU?

10

Kami memiliki proses yang berjalan lama pada server jarak jauh yang dimulai secara manual dari waktu ke waktu. Sayangnya koneksi internet mati, kernel panik dan sejumlah tantangan lain dapat ditemui dengan sesi ssh yang digunakan untuk menghubungkan dan memulai pekerjaan.

Layar sepertinya cara yang sempurna untuk memastikan prosesnya tidak terganggu. Namun, mengandalkan seseorang untuk selalu ingat untuk memulai layar dan kemudian menjalankan skrip untuk memulai proses adalah masalah yang menunggu untuk terjadi. Apakah ada cara dari skrip yang dapat saya periksa untuk melihat apakah skrip dipanggil dari dalam layar? Jika ini adalah proses akan berlanjut kalau tidak skrip akan keluar dengan pesan yang menginstruksikan pengguna untuk menjalankan layar terlebih dahulu.

cclark
sumber

Jawaban:

11

Ada variabel lingkungan untuk itu. Jika sedang dijalankan di dalam layar, $TERMakan screen. Sesederhana itu; lakukan saja jika ada di atasnya. Contohnya,

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

akan menggema bilah ketika di layar; foo sebaliknya.

Falcon Momot
sumber
2
Bisa juga screen-256colorjika pengguna telah mengkonfigurasi dukungan 256 warna.
Mgorven
atau screen-bce pada sistem dengan byobu diinstal. echo $ TERM screen-
bce
7

Saat Anda bekerja dengan layar, mengapa tidak menjalankan skrip dengan 'nohup'? Ini juga akan memastikan bahwa itu terus berjalan jika Anda terputus.

Ini output ke file secara default, sehingga Anda dapat menggunakan alat lain untuk memantau output skrip jika Anda inginkan.

Magellan
sumber
1
Saat menjalankan dengan nohup akan mencapai hasil yang sama untuk memastikan proses terus berjalan apakah saya masih memiliki masalah yang sama dengan seseorang yang berpotensi lupa menjalankan skrip dengan nohup? Atau apakah ada cara dalam skrip untuk memastikan 'nohup' digunakan atau apakah saya perlu membuat skrip wrapper yang menyebut skrip asli saya dengan nohup?
cclark
Ya. Sementara saya suka padawans (junior sysadmin) saya seperti saya mencintai anak-anak saya, mereka sering melupakan hal-hal semacam itu. Jadi semuanya dibungkus sehingga mereka tidak harus mengingat hal-hal apa yang harus diketik untuk awalan perintah penting.
Magellan