Я наконец решил это с псевдонимом:
alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'
Обязательно используйте одинарные кавычки, чтобы переменные раскрывались во время вызова, а не во время определения псевдонима.
Эта:
- сохраняет HOME (в противном случае устанавливается / root)
- сохраняет PATH (который в противном случае устанавливается в «безопасный» путь в suders)
- сохраняет текущее значение LD_LIBRARY_PATH (которое в противном случае становится пустым)
(Вы можете увидеть , что вещи , приготовьтесь к с: sudo bash -c "echo $HOME"
)
Я работаю с нестандартными драйверами и всегда вынужден использовать свои тестовые программы для доступа к драйверу. Я не хочу устанавливать тестовые версии библиотек в системной области, поэтому я использую LD_LIBRARY_PATH для настройки конкретного тестового каталога по мере необходимости. Я не могу просто установить фиксированный LD_LIBRARY_PATH, мне нужно иметь возможность изменить его и сохранить текущие настройки. Сохранение PATH и HOME дает мне доступ к моей рабочей среде - сценариям и структуре каталогов.
Этот псевдоним позволяет избежать необходимости предоставления общих разрешений в sudoers ... и, по-видимому, в любом случае обходного пути для LD_LIBRARY_PATH не существует, независимо от настроек sudoers. Это не работает sudo внутри скриптов, но они могут быть жестко закодированы по мере необходимости.
~/.bashrc