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 sesi layar lama. Anda dapat mengisi fifo tersebut saat memulai sesi grafis.
#!/bin/bash
FIFO=/tmp/your_variables
[ -e $FIFO ] && cat $FIFO > /dev/null || mkfifo $FIFO
# save number of variables that follow
NVARS=2
echo $NVARS > $FIFO
echo ENV1=sth1 > $FIFO
echo ENV2=sth2 > $FIFO
Jalankan skrip tersebut di latar belakang saat login (ini hanya akan berhenti jika semua variabel dibaca darinya).
Sekarang Anda dapat membaca dari fifo, mis. tambahkan fungsi ini ke .bashrc Anda
update_session() {
FIFO=/tmp/your_variables
NVAR=$(cat $FIFO)
for i in $(seq $NVAR); do
export $(cat $FIFO)
done
#delete the pipe, or it will not work next time
rm $FIFO
}
sehingga Anda bisa di screen lama Anda sesi
update_session
Anda dapat memanggil setenv perintah untuk mengubah variabel lingkungan dalam proses layar secara interaktif, dengan menggunakan:Ctrl -A +:setenv (Perhatikan : karakter untuk memasukkan perintah layar.) Anda akan dimintai nama dan nilai variabel lingkungan.
Perhatikan bahwa (sesuai jawaban/komentar lainnya) 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 secara bersamaan jika Anda ingin:Ctrl -A +:setenv DISPLAY :100 . Akan menyetel DISPLAY ke ":100" untuk sesi layar baru.
Untuk menghapus variabel lingkungan, Anda dapat menggunakan 'unsetenv' - mis. Ctrl -A +:unsetenv DISPLAY
Saya telah menerapkan skrip untuk melakukan ini. Anda bisa mendapatkannya di sini:https://github.com/DarwinAwardWinner/screen-sendenv
Setelah meletakkan screen-sendenv.py ke dalam $PATH Anda , Anda dapat menggunakan cuplikan berikut di .bashrc:
VARS_TO_UPDATE="DISPLAY DBUS_SESSION_BUS_ADDRESS SESSION_MANAGER GPG_AGENT_INFO"
screen_pushenv () {
screen-sendenv.py -t screen $VARS_TO_UPDATE
}
tmux_pushenv () {
screen-sendenv.py -t tmux $VARS_TO_UPDATE
}
screen_pullenv () {
tempfile=$(mktemp -q) && {
for var in $VARS_TO_UPDATE; do
screen sh -c "echo export $var=\$$var >> \"$tempfile\""
done
. "$tempfile"
rm -f "$tempfile"
}
}
tmux_pullenv () {
for var in $VARS_TO_UPDATE; do
expr="$(tmux showenv | grep "^$var=")"
if [ -n "$expr" ]; then
export "$expr"
fi
done
}
Untuk menggunakannya, cukup jalankan screen_pushenv sebelum Anda menjalankan screen -r untuk memasang kembali ke sesi layar Anda. Kemudian, setelah dilampirkan dengan screen -r , Anda dapat memperbarui lingkungan di shell yang ada dengan screen_pullenv . Fungsi tmux mencapai hal yang sama untuk tmux, multiplexer terminal lain yang mirip dengan screen.