~에서https://stackoverflow.com/a/29400598/156458
지금까지 본 다른 솔루션은 일부 시스템 정의를 기반으로 하지만 실제로 는 올바르게 호출하여
sudo
현재 환경PATH
(env
명령 사용) 및/또는 나머지 환경(옵션 사용) 에서 작동합니다-E
.sudo -E env "PATH=$PATH" <command> [arguments]
실제로 이를 사용하여 별칭을 만들 수 있습니다.
alias mysudo='sudo -E env "PATH=$PATH"'
sudo
( 원본 이름을 대체하여 별칭 자체의 이름을 지정할 수도 있습니다sudo
.)
반면
-E, --preserve-env 사용자가 기존 환경 변수를 보존하기를 원함을 나타내는 보안 정책입니다. 사용자에게 환경을 보호할 권한이 없으면 보안 정책에서 오류가 반환될 수 있습니다.
다음이 작동하지 않는 이유를 알고 싶습니다.
sudo -E <command> [arguments]
?
이것도 "PATH=$PATH" <command> [arguments]
명령이라는 점을 감안할 때 다음이 작동하지 않는 이유가 궁금합니다.
sudo "PATH=$PATH" <command> [arguments]
?
감사해요.
답변1
sudo -E <command> [arguments]
Debian이 Even with의 값을 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]
이는 및 then 에 표시된 대로 "PATH=$PATH"
의 현재 값이 PATH
명령에 저장되기 때문에 작동합니다. 그러나 환경을 구축하기 위해 인수에서 해당 값을 읽습니다 .sudo
env
sudo
PATH
env
env
<command>
여기서는 명령이 env
in으로 조회되지만, 그 자체는 available로 조회됩니다.sudo
secure_path
env
<command>
$PATH