명령을 실행하면 sudo
변수 값이 에코되지만 스크립트에서 동일한 명령을 실행하면 그렇지 sudo
않은 이유는 무엇입니까?
➜ echo "$XDG_CONFIG_HOME"
/Users/cc/.config
➜ sudo echo "$XDG_CONFIG_HOME"
/Users/cc/.config
➜ cat sample.sh
#!/usr/bin/env sh
echo "$XDG_CONFIG_HOME"
➜ ./sample.sh
/Users/cc/.config
➜ sudo ./sample.sh
➜
추신: Linux에서도 이것을 시도했는데 비슷한 결과가 나왔습니다.
답변1
에서 sudo echo "$XDG_CONFIG_HOME"
쉘은 변수를 실행하기 전에 변수를 확장 sudo
하고 올바르게 실행되는지 sudo
확인합니다 .echo /Users/cc/.config
에서는 스크립트를 실행하기 위해 쉘이 시작된 sudo ./sample.sh
다음 sudo
, 쉘이 확장을 실행합니다. 이제 설정에 따라 sudo
환경 변수를 삭제하여 권한 있는 명령이 명령을 받지 못하도록 보호할 수 있습니다.
env_reset
, env_check
및 설정과 env_delete
옵션 을 참조하세요 .env_keep
-E
sudo
sudo
변수를 원래 셸로 내보내지 않더라도 동일한 효과를 얻을 수 있습니다.
foo=bar
echo $foo
sh -c 'echo $foo'