Saya menggunakan linux, dan saya suka melakukan semua pekerjaan baris perintah saya dalam satu sesi layar, sehingga saya bisa memulai kembali login grafis saya dan semacamnya tanpa kehilangan terminal saya. Namun, ketika saya keluar dan kembali ke sesi grafis saya, ini mengubah semua variabel lingkungan sesi saya, seperti sesi DBus. Ini berarti bahwa setelah masuk lagi, sesi layar saya sekarang memiliki variabel lingkungan lama (dan salah). Jadi sekarang ketika saya mencoba untuk memulai program grafis dari sesi layar saya, paling-paling mereka memancarkan peringatan tentang tidak dapat terhubung ke bus sesi. Paling buruk, mereka gagal memulai sepenuhnya.
Jadi, apa yang saya cari adalah cara untuk memodifikasi variabel lingkungan dalam instance layar yang sedang berjalan, sehingga semua jendela layar yang dibuat selanjutnya akan mewarisi variabel lingkungan baru. Apakah ada cara untuk melakukan ini?
sumber
setenv [var [string]] Set the environment variable var to value string. If only var is specified, the user will be prompted to enter a value. If no parameters are specified, the user will be prompted for both variable and value. The environment is inherited by all subsequently forked shells.
Jawaban:
Anda tidak dapat memulai skrip shell dari
screen
sesi karena akan mewarisi lingkungan lama. Namun Anda dapat menggunakan fifo untuk memasukkan variabel lingkungan baru ke dalam sesi layar lama. Anda dapat mengisi fifo itu saat memulai sesi grafis Anda.Mulai skrip itu di latar belakang saat login (itu hanya akan berakhir ketika semua variabel dibaca dari itu).
Sekarang Anda dapat membaca dari fifo, mis. Tambahkan fungsi ini ke
.bashrc
sehingga Anda bisa di
screen
sesi lama Andasumber
screen
. AFAIKscreen
tidak mengekspos soket atau serupa untuk berkomunikasi dengan sesi berjalan dari luar.screen
sudah memiliki variabel lingkungan terbaruSaya telah mengimplementasikan skrip untuk melakukan ini. Anda bisa mendapatkannya di sini: https://github.com/DarwinAwardWinner/screen-sendenv
Setelah menempatkan
screen-sendenv.py
ke dalam$PATH
, Anda dapat menggunakan potongan berikut di .bashrc:Untuk menggunakannya, jalankan saja
screen_pushenv
sebelum Anda menjalankanscreen -r
untuk memasang kembali ke sesi layar Anda. Kemudian, setelah melampirkanscreen -r
, Anda dapat memperbarui lingkungan di shell yang ada denganscreen_pullenv
. Fungsi tmux melakukan hal yang sama untuk tmux, terminal multiplexer lain yang mirip dengan layar.sumber
screen_update
dantmux_update
fungsinya. Saya akan memperbarui jawaban saya dengan versi byobu-independen ini.setenv
saya melihat bagaimana ini lebih baik. Tidak jelas dari kode yang Anda tautkan. Terima kasih lagi!Anda dapat memanggil
setenv
perintah untuk mengubah variabel lingkungan dalam proses layar secara interaktif, dengan menggunakan: Ctrl- A+:setenv
(Catat:
karakter untuk memasukkan perintah layar.) Anda akan diminta untuk nama dan nilai variabel lingkungan.Perhatikan bahwa (sesuai jawaban / komentar lain) ini memengaruhi proses layar (induk) dan karenanya sesi layar yang baru dibuat, tetapi bukan sesi layar Anda saat ini atau sesi layar yang ada.
Anda dapat menentukan nama dan nilai variabel lingkungan pada saat yang sama jika Anda ingin: Ctrl- A+
:setenv DISPLAY :100
. Akan mengatur DISPLAY ke ": 100" untuk sesi layar baru.Untuk menghapus variabel lingkungan, Anda dapat menggunakan 'unsetenv' - misalnya Ctrl- A+
:unsetenv DISPLAY
sumber
Ini mungkin solusi yang lebih sederhana (Anda putuskan). Bagian penting adalah alias yang memanggil
savedisplay
fungsi setiap kaliscreen
perintah dijalankan. Perintah-perintah tidak dijalankan secara otomatis, karenanya dapat dimasukkan~/.bashrc
sebagai ganti sesuatu yang sangat khusus seperti~/.ssh/rc
.sumber