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
.