Cuối cùng tôi đã giải quyết điều này với một bí danh:
alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'
Hãy chắc chắn sử dụng các dấu ngoặc đơn, để các biến được mở rộng tại thời điểm gọi, không phải tại thời điểm bí danh được xác định.
Điều này:
- giữ nguyên HOME (nếu không được đặt thành / root)
- duy trì PATH (mặt khác được đặt thành đường dẫn 'an toàn' trong suders)
- giữ nguyên giá trị hiện tại của LD_LIBRARY_PATH (nếu không sẽ bị xóa trắng)
(Bạn có thể thấy những thứ được thiết lập với sudo bash -c "echo $HOME"
:)
Tôi đang làm việc với các trình điều khiển tùy chỉnh và luôn phải sudo các chương trình thử nghiệm của mình để truy cập trình điều khiển. Tôi không muốn cài đặt các phiên bản thử nghiệm của các thư viện trong khu vực hệ thống, vì vậy tôi sử dụng LD_LIBRARY_PATH để thiết lập một thư mục thử nghiệm cụ thể khi cần. Tôi không thể chỉ đặt LD_LIBRARY_PATH cố định, tôi cần có thể thay đổi nó và giữ cài đặt hiện tại. Bảo tồn PATH và HOME cho phép tôi truy cập vào môi trường làm việc của mình - tập lệnh và cấu trúc thư mục.
Bí danh này tránh việc phải cấp quyền cho chăn trong sudoers ... và rõ ràng không có cách giải quyết nào cho LD_LIBRARY_PATH bất kể cài đặt sudoers nào. Nó không hoạt động sudo bên trong các tập lệnh, nhưng chúng có thể được mã hóa cứng khi cần thiết.
~/.bashrc