Anda bisa berlari screen -S foo -X setenv DISPLAY "$DISPLAY"; screen -S foo -rd
untuk mengubah lingkungan screen
proses sebelum melampirkan. Ini tidak akan memengaruhi jendela yang ada.
Anda mungkin dapat mengkonfigurasi shell Anda untuk memeriksa pembaruan DISPLAY
(dan variabel lain yang relevan seperti XAUTHORITY
) setiap kali mereka menampilkan prompt. (Ini berarti Anda mungkin harus menekan Memasukkan sekali jika shell sedang duduk di prompt ketika Anda memasang sesi.) Bash mengevaluasi $PROMPT_COMMAND
sebelum menampilkan setiap prompt. Zsh menjalankan precmd
berfungsi sebelum menampilkan setiap prompt. Misalnya, jika Anda telah memasukkan tugas lingkungan yang diinginkan dalam skrip ~/var/run/screen-12345.foo.env-update.sh
(di mana 12345 adalah pid dari proses layar dan foo
adalah nama sesi), Anda dapat menggunakan sesuatu seperti (untuk zsh, belum diuji; Saya tidak berpikir Anda akan bisa pergi tanpa forking di bash):
precmd () {
local now=$SECONDS
set ~/var/run/"screen-$STY.env-update.sh"(Nms-$(($now-$screen_env_time)))
if [[ $# -ne 0 ]]; then
screen_env_time=$now
. ~/var/run/"screen-$STY.env-update.sh"
fi
}
Hal lain yang bisa Anda lakukan $PROMPT_COMMAND
atau precmd
, pada beberapa sistem operasi, dibaca lingkungan proses induk (ini mengasumsikan Anda telah memperbarui lingkungan proses layar). Misalnya, di Linux dengan zsh (lakukan ini hanya jika berjalan di bawah layar):
precmd () {
local record
while read -r -d $'\0' record /proc/$PPID/environ; do
case ${record%%=*} in
DISPLAY|XAUHORITY) export $record;;
esac
done
}
Secara teknis, Anda dapat mengubah lingkungan proses lain, menggunakan debugger. Tetapi ada kemungkinan besar itu akan merusak proses itu, karena struktur data internal program tidak akan cocok dengan data yang disimpan oleh kernel.
Perhatikan bahwa tidak ada solusi ini yang berguna jika Anda menjalankan ssh di dalam jendela layar.
cat /tmp/screen_variable
semuanya baik. Saya hanya ingin mengotomatisasi itu.