이상한 질문이네요. 저도 알아요. 스크립트는 다음과 같습니다.
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
추가 자료
man sudo
, "환경" 섹션에서:SUDO_USER Set to the login name of the user who invoked sudo.
맨페이지에는 다음 과
sudo
같이 유용하게 정의된 기타 관련 환경 변수도 설명되어 있습니다.SUDO_UID
SUDO_GID
답변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.