sudo로 명령을 실행하는 것과 sudo로 스크립트를 실행하는 것의 차이점은 무엇입니까?

sudo로 명령을 실행하는 것과 sudo로 스크립트를 실행하는 것의 차이점은 무엇입니까?

명령을 실행하면 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-Esudo

sudo변수를 원래 셸로 내보내지 않더라도 동일한 효과를 얻을 수 있습니다.

foo=bar
echo $foo
sh -c 'echo $foo'

관련 정보