Sebagai contoh untuk pertanyaan saya, ~/.bashrc
file saya berisi baris ini:
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/ia32:$LD_LIBRARY_PATH
export LD_PRELOAD=/opt/intel/mkl/lib/ia32/libmkl_core.so
sehingga Numpy (Python) dapat menemukan perpustakaan yang perlu dijalankan, karena dibangun dengan kompiler MKL dan Intel. Alur kerja ini bukan yang terbaik, tapi itu cerita lain.
Pertanyaan saya adalah bagaimana saya bisa meneruskan variabel arbitrer (seperti yang ada di ~/.bashrc
) ketika saya menjalankan program dengan 'sudo' (tetapi tidak root)?
Saat ini, jika saya menjalankan:
sudo python -c "import numpy"
Saya mendapatkan kesalahan:
ImportError: libimf.so: cannot open shared object file: No such file or directory*
Beberapa saran sebagai sudo -i
atau sudo -E
tidak mengubah apa pun di sini.
Sunting:
Saya tidak bisa menjawab pertanyaan saya (tidak cukup poin: D) tapi saya akan berkomentar di sini, dengan harapan ada pemula Linux lain yang bertanya-tanya tentang sudo
jebakan.
[Hanya sementara!] Ini bekerja untuk saya ( ~/.bashrc
):
alias sudo='sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'
The
-E
pilihan Anda menyebutkan tampaknya bekerja dengan baik:sumber
sudo python -c "import numpy"
denganLD_LIBRARY_PATH
danLD_PRELOAD
didefinisikan seperti yang tertulis di atas?SECURITY NOTES
darisudo
halaman manual.man sudo
tidak membuatnya jelas, dan ketika pengguna mencoba untuk mengikuti referensi yang ditunjukkan di sana, sangat mudah untuk berkecil hati oleh semua cabang yang perlu diikuti, untuk dapat mendekripsi seharusnya berarti.Anda dapat menggunakan
-E
opsi sudo untuk menjaga lingkungan saat ini (jika Anda memiliki hak untuk melakukannya)sumber
Anda perlu mengedit Anda
sudoers
dengansudo visudo
sebagai kemungkinan Anda sudah Plugin kebijakan keamanan diaktifkan yang menimpa AndaPATH
dengansecure_path
pilihan. Jadi tambahkan path ke daftar dan Anda juga bisa menggunakanenv_keep
, sebagai contoh:Untuk memeriksa apakah Anda
PATH
diganti, jalankan perintah berikut:Lihat juga: Mengapa variabel PATH berbeda ketika berjalan melalui sudo dan su? di Unix SE
sumber
env_keep
tidak berfungsi pada PATH (dalam arti yangsudo
masih digunakansecure_path
saat mencari perintah)Ini berfungsi untuk saya (
~/.bashrc
):Sumber: Sesuai OP edit
sumber
sudo
kurang aman