Bagaimana cara menetapkan variabel lingkungan persisten untuk root?

40

Untuk membuat variabel lingkungan persisten, saya menambahkan file skrip ke direktori /etc/profile.d, misalnya:

# skrip saya
ekspor MY_VAR = var_value

Ini berfungsi dengan baik untuk pengguna saat ini:

alex @ alex-64: ~ $ echo $ MY_VAR
var_value

Sekarang saya membutuhkan variabel lingkungan yang sama untuk pengguna root, tetapi script /etc/profile.d tidak berfungsi untuk root:

alex @ alex-64: ~ $ echo $ MY_VAR
var_value
alex @ alex-64: ~ $ sudo su
root @ alex-64: / home / alex # echo $ MY_VAR

root @ alex-64: / home / alex # 

Bagaimana saya bisa mengatur variabel yang sama untuk root?

Alex F
sumber
2
Pertanyaan ini tentang bagaimana cara melestarikan variabel tertentu dari lingkungan pemanggil saat menjalankan sudosangat terkait. (Tetapi ini bukan duplikat karena pertanyaan ini adalah tentang bagaimana menyesuaikan lingkungan root sendiri .)
Eliah Kagan

Jawaban:

44

sudo biasanya tidak melestarikan variabel lingkungan lokal. Anda harus menggunakannya dengan -Eswitch untuk melakukannya, yaitu sudo -E suakan menghemat $ MYVAR untuk root.

Atau, untuk membuat variabel persisten yang benar-benar luas sistem, Anda harus mengaturnya /etc/environment.

ish
sumber
14
Tidak berfungsi, / etc / variabel lingkungan tidak diset untuk sudo
Frederic Yesid Peña Sánchez
3
@ FredericYesidPeñaSánchez lakukan untuk saya di CentOS. Anda tidak skrip di sana, Anda hanya melakukan tugas sederhana pada setiap baris, yaituFOO=bar
iamyojimbo
10

Seperti proses yang Anda tetapkan variabel lingkungan Anda sendiri, misalnya dengan mengedit '~ / .bashrc', Anda dapat mendefinisikan variabel lingkungan root dengan mengedit '/root/.bashrc'.

ppppplv
sumber
8

Defaults env_resetdi /etc/sudoersakan mengatur ulang root yang PATHditentukan oleh /etc/environment.

Anda dapat memodifikasinya Defaults !env_resetuntuk menonaktifkan pengaturan ulang atau menambahkan:

Defaults secure_path="my/custom/path:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
diyism
sumber
Jika saya ingin menggunakan solusi kedua (artinya tambahkan path ke secure_path), apa kuncinya ?! jalan hanya nilai. Saya ingin menambahkan ANDROID_NDK ke variabel lingkungan untuk root. Jadi untuk sekarang, saya hanya menggunakan yang pertama (! Env_reset). Terima kasih.
Dr.jacky