Saya akhirnya menyelesaikan ini dengan alias:
alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'
Pastikan untuk menggunakan tanda kutip tunggal, sehingga variabel diperluas pada saat doa, bukan pada saat alias didefinisikan.
Ini:
- mempertahankan HOME (yang sebaliknya diatur ke / root)
- mempertahankan PATH (yang jika tidak diatur ke jalur 'aman' di suders)
- mempertahankan saat ini nilai LD_LIBRARY_PATH (yang jika tidak akan blanked)
(Anda dapat melihat hal-hal apa yang bisa diatur dengan sudo bash -c "echo $HOME"
:)
Saya bekerja dengan driver khusus dan selalu harus sudo program pengujian saya untuk mengakses driver. Saya tidak ingin menginstal versi uji pustaka di area sistem, jadi saya menggunakan LD_LIBRARY_PATH untuk menyiapkan direktori pengujian tertentu sesuai kebutuhan. Saya tidak bisa hanya menetapkan LD_LIBRARY_PATH yang diperbaiki, saya harus dapat mengubahnya dan mempertahankan pengaturan saat ini. Mempertahankan PATH dan HOME memberi saya akses ke lingkungan kerja saya - skrip dan struktur direktori.
Alias ini menghindari keharusan memberikan izin selimut di sudoers ... dan tampaknya tidak ada solusi untuk LD_LIBRARY_PATH, terlepas dari pengaturan sudoer. Ini tidak berfungsi sudo di dalam skrip, tetapi itu bisa di-hardcode sesuai kebutuhan.
~/.bashrc