루트 사용자의 PATH 환경 변수를 변경했습니다. 다음 명령은 경로도 표시합니다.
su
env | grep ^PATH
경로=/root/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/opt/distrod/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin :/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/pierre/.nix-profile/bin
하지만
sudo env | grep ^PATH
경로=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
내가 놓친 게 무엇입니까?
써보면 안다
sudo echo $PATH
사용자를 변경하기 전에 PATH가 이미 평가되었기 때문에 작동하지 않습니다. 이게 그렇게 문제가 된다고는 생각하지 않지만 다른 생각은 없어요
답변1
내가 놓친 게 무엇입니까?
이 sudo는 환경 변수를 정리하고 명시적으로 허용한 변수만 전달합니다.
답변2
내 생각에 sudo는 호출하는 사용자의 .profile 값을 사용하고 su는 새 ID로 전환하는 과정의 일부로 .profile 등을 실행합니다. 나는 sudo -i가 올바른 PATH 변수를 얻을 것이라고 생각합니다.
-i--로그인
Run the shell specified by the target user's password database entry as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. The command is run with an environment similar to the one a user would receive at log in. The Command Environment section in the sudoers(5) manual documents how the -i option affects the environment in which a command is run when the sudoers policy is in use.