`sudo`로 실행되는 스크립트 내에서 원래 $USER 변수에 액세스할 수 있나요?

`sudo`로 실행되는 스크립트 내에서 원래 $USER 변수에 액세스할 수 있나요?

이상한 질문이네요. 저도 알아요. 스크립트는 다음과 같습니다.

echo $USER

실행하는 데 사용하는 명령은 다음과 같습니다.

sudo ./myscript.sh

jon지금은 "root"를 인쇄하지만 내 사용자 이름인 을 인쇄하고 싶습니다 . 명령이 아닌 스크립트를 변경하여 이를 수행할 수 있는 방법이 있습니까?

답변1

SUDO_USER대신 환경 변수를 사용하십시오 USER.

sudo이를 실행한 사용자의 이름을 SUDO_USER환경 변수에 넣습니다.

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

따라서 스크립트에서 간단히 다음 $USER으로 바꿀 수 있습니다 .$SUDO_USER

echo $SUDO_USER

추가 자료

답변2

게다가위의 @Eliah Kagan의 답변, 컨텍스트에서 실행되는지 여부에 관계없이 작동하는 확장을 쉽게 가질 수도 있다는 점을 지적하고 싶습니다 sudo.

echo "${SUDO_USER:-$USER}"

이는 기본적으로 값으로 확장되지만 $SUDO_USER해당 변수가 설정되지 않거나 비어 있는 경우 값으로 대체됩니다 $USER.

$ bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

$ sudo bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

Bash의 기본 매개변수 확장에 대한 자세한 내용은 다음에서 확인할 수 있습니다.https://wiki.bash-hackers.org/syntax/pe#use_a_default_value.

관련 정보