답변:
.NET을 사용하는 경우 $ SUDO_USER가 작동하지 않습니다 sudo su -.
또한 여러 검사를 필요로 - 경우 $USER == 'root'다음 얻을 $SUDO_USER.
대신에 명령의 whoami사용 who am i. who현재 세션에 대해 필터링 된 명령 이 실행됩니다 . 필요한 것보다 더 많은 정보를 제공합니다. 따라서 사용자 만 얻으려면 다음을 수행하십시오.
who am i | awk '{print $1}'
또는 더 간단하게 사용할 수 있습니다 logname. 위의 문장과 같은 일을합니다.
세션에 로그인 한 사용자 이름을 제공합니다.
이는 sudo또는에 관계없이 작동 sudo su [whatever]합니다. 또한 횟수에 관계없이 작동 su및 sudo이라고합니다.
who am i입니다 who mom likes. 당신의 선택.
who두 줄 모두 내 이름을 포함하고 who am i아무것도 반환하지 않습니다. 도움이 필요하세요?
who am i은 아무것도하지 않는다. 간단하게 보인다 who. 그래서 who | awk '{print $1}'예상대로 작동한다;)
awk설치, 당신은 또한 사용할 수 있습니다 cut: who mom likes | cut -d' ' -f1 또는 sed몇 가지 이유 : who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
$ SUDO_USER 가 유효 하다고 생각 합니다.
#!/bin/bash
echo $SUDO_USER
whoami
sudo env쇼 SUDO_USER그러나 sudo echo $SUDO_USER인쇄 아무것도 ...
sudo echo $SUDO_USERbash는 sudo 를 실행 하기 전에 $ SUDO_USER 를 평가 합니다. 이 솔루션에 게시 된 스크립트를 사용해보십시오.
$SUDO_USER작동하지 sudo su -않지만 logname항상 작동합니다.
sudo 여부에 관계없이 스크립트를 호출 한 사람의 사용자 이름을 얻는 방법은 다음과 같습니다.
if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi
또는 더 짧은 버전
[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
user=${SUDO_USER:-$(whoami)}또는user=$(logname)
who am i | awk '{print $1}'나를 위해 일하지 않았지만 일을
who|awk '{print $1}'할 것입니다
이상하게도 시스템은 실제 UID와 효과적인 UID를 구분 하지만 쉘 수준에서이를 내보내는 프로그램을 찾을 수 없습니다.
who am i이 여기에 대한 답입니다.