/etc/environment
secara resmi tempat yang tepat untuk variabel lingkungan sistem lebar. Tetapi bagaimana saya bisa memuat ulang tugas dalam file ini tanpa me-reboot atau me-reog?
Yang cukup menarik, Google tidak membantu saya di sini, selain dari lusinan posting blog yang menyarankan untuk digunakan
source /etc/environment
yang jelas tidak akan pernah berhasil karena /etc/environment
merupakan daftar tugas (satu per baris) dan bukan skrip yang dapat dieksekusi (karenanya export
perintah yang hilang di /etc/environment
...).
ubuntu
environment-variables
fgysin
sumber
sumber
for line in $( cat /etc/environment ) ; do export $line ; done
, jika format file adalahkey=value
.export
...export
itu akan diperlukan ... (tanpanya itu hanya normal non variabel lingkungan dalam shell saat ini, tidak tersedia dalam proses anak)Jawaban:
Satu hal yang salah tentang Anda adalah
/etc/environment
perlu me-reboot untuk memuat ulang. Ini salah. Satu-satunya waktu file dibaca adalah saat login , ketika tumpukan PAM diaktifkan - khususnyapam_env.so
, yang membaca file.Keluar dan kembali akan menerapkan perubahan - dan pada kenyataannya Anda harus melakukan ini jika Anda ingin semua proses Anda menerima lingkungan baru . Semua "solusi" 2 lainnya hanya akan menerapkan lingkungan ke proses shell tunggal, tetapi tidak untuk apa pun yang Anda luncurkan melalui GUI termasuk jendela terminal baru. 1
Namun, jika Anda setuju dengan itu - kurangnya
export
perintah dapat dikompensasi denganset -a
danset +a
. Namun, ini tetap merupakan cara yang buruk, karena file tersebut tidak menggunakan penawaran. Tetapi ini seharusnya bekerja dengan baik:1 Manajer Sesi GNOME menyediakan cara untuk mengubah lingkungannya sendiri, tetapi hanya selama
Initialization
fase:2
gdb
bukanlah solusi, tetapi terkadang dapat digunakan. Anda harus melampirkannya pada proses yang berjalan dari manajer sesi Anda (misalnyagnome-session
), manajer jendela Anda (misalnyagnome-shell
atauopenbox
), taskbar / panel Anda jika ada (misalnyaxfce4-panel
), dan umumnya hal lain yang mungkin menjalankan barang. Untuk setiap proses tersebut, Anda harus melampirkannyagdb
dengan PID, menjalankanputenv()
fungsi menggunakanp
, lalu melepaskan menggunakanq
:Perhatikan bahwa debugger menghentikan proses, oleh karena itu Anda harus melampirkan ke compositing window manager hanya dari tty lain (konsol virtual) atau lebih dari SSH, jika tidak layar akan membeku.
Selain itu, Anda juga harus memperbarui lingkungan yang digunakan oleh dbus-daemon:
Untuk sistem yang lebih lama:
sumber
while read
metode membaca daristdin
, sehingga Anda mungkin ingin pipa sesuatu untuk itu (misalnyacat /etc/environment | while ...
). Tapi ini tidak akan berfungsi dengan file lingkungan kutipan yang diformat (key="value"
)Ini tidak selengkap jawaban yang diterima, tetapi jika Anda telah mengutip variabel dalam
/etc/environment
file Anda, kedua metode sebelumnya (yang menggunakanexport $line
entah bagaimana) akan salah dan Anda berakhir dengan nilai yang dikutip.sed 's/^/export /' /etc/environment > /tmp/env.sh && source /tmp/env.sh
for
(terima kasih @ tim-jones):for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
sumber
sed 's/^/export /' /etc/environment
for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
set -a; source /etc/environment; set +a;
.