Почему следующие способы сохранения переменных окружения для su не работают?

Использование замены шаблона в bash версии 4.2 (и выше):

${parameter/pattern/string}

как описано здесьhttp://steve-parker.org/sh/tips/pattern-substitution/

UNICODE_HEX="U+02211"
printf ${UNICODE_HEX/U+/"\U"}
∑

UNICODE_HEX="U+03BB"
printf ${UNICODE_HEX/U+/"\U"}
λ         

-1
09.05.2018, 15:12
1 ответ
sudo -E <command> [arguments]

не работает в вашем случае, потому что Debian определяет secure_pathв /etc/defaults, что переопределяет значение PATHдаже с -E.

sudo  "PATH=$PATH" <command> [arguments]

должен работать, потому что PATH=$PATHраспознается и обрабатывается sudo. В моем случае sudo "PATH=$PATH" envпоказывает мое текущее значение PATH. (Обратите внимание, что PATH=$PATH <command>не является общепризнанной -командой; он соответствует конструкции, которая распознается оболочкой и sudo, но не обязательно в других контекстах. ).

Однако сам sudoне использует этот $PATHдля поиска <command>и по-прежнему использует secure_path.

sudo -E env "PATH=$PATH" <command> [arguments]

работает, потому что "PATH=$PATH"сохраняет текущее значение PATHв команде, как видно из sudo, а затем env; sudoзаменяет значение PATH, заданное envв своей среде, но envзатем считывает значение из своих аргументов, чтобы построить среду для <command>.

А здесь команда envпросматривается -с помощью sudoв secure_path, но сама envпросматривается <command>в предоставленном $PATH.

9
28.01.2020, 05:06

Теги

Похожие вопросы