내가 아는 한, sudo -u <user>
상속된 sudo를 "취소"하고 일반 사용자로 다음 줄을 실행하기 위해 sudo로 실행되는 스크립트에서 이것을 사용할 수 있습니다. 적어도 아래의 맥락에서는 그렇지 않습니다. sudo -u <user>
아무 것도 하지 않는 것 같습니다!
이를 설명하기 위해 두 개의 간단한 Bash 스크립트인 master.sh
스크립트와 slave.sh
스크립트를 사용합니다.
master.sh:
#!/bin/bash
sudo -u dad /home/dad/Downloads/slave.sh
슬레이브.sh:
#!/bin/bash
if [[ ! -v DOTNET_ROOT ]] # If variable is not set ...
then
echo "DOTNET_ROOT needs to be set ..."
else
echo "No need to set DOTNET_ROOT."
fi
다양한 시나리오를 실행할 때 발생하는 상황은 다음과 같습니다.
dad@DadsGram~/Downloads $ echo $DOTNET_ROOT
/home/dad/.dotnet
dad@DadsGram~/Downloads $ ./slave.sh
No need to set DOTNET_ROOT.
dad@DadsGram~/Downloads $ sudo ./master.sh
DOTNET_ROOT needs to be set ...
dad@DadsGram~/Downloads $ sudo ./slave.sh
DOTNET_ROOT needs to be set ...
내가 뭘 잘못했나요?
답변1
두 번째는 sudo
이전 항목을 "취소"하지 않고 sudo
이전 항목을 덮어씁니다. 그것은 모자를 벗는 대신 가발을 모자에 씌우는 것과 같습니다.
sudo
이것이 환경 변수 삭제의 부작용이 있다는 것을 알고 계실 것 같습니다 . (참고: 그게 아니기 때문에기초적인이를 위해 sudo
자신이 이해한 것과 달성하고자 하는 것이 무엇인지 좀 더 명확하게 설명할 수 있다면 좋을 것 같습니다. ) 두 번째는 sudo
첫 번째 UID 설정을 덮어씁니다. 전체 환경을 처음 이전 상태로 복원할 수는 없습니다 sudo
. 삭제된 환경 변수를 마법처럼 복원할 수는 없습니다.