[linux] sudo가 호출하는 Bash 스크립트에서 사용자 식별

다음을 /root/bin/whoami.sh포함 하는 스크립트 를 만드는 경우 :

#!/bin/bash
whoami

이 스크립트는 올바르게 구성된 sudo를 사용하여 사용자가 호출합니다.

root

스크립트에서 실제 사용자를 얻는 빠른 방법이 있습니까? 아니면이 사용자 이름을 전달하는 매개 변수에 의존해야합니까?



답변

.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]합니다. 또한 횟수에 관계없이 작동 susudo이라고합니다.


답변

$ SUDO_USER 가 유효 하다고 생각 합니다.

#!/bin/bash
echo $SUDO_USER
whoami


답변

sudo 여부에 관계없이 스크립트를 호출 한 사람의 사용자 이름을 얻는 방법은 다음과 같습니다.

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi

또는 더 짧은 버전

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`


답변

who am i | awk '{print $1}'나를 위해 일하지 않았지만 일을
who|awk '{print $1}'할 것입니다


답변

이상하게도 시스템은 실제 UID와 효과적인 UID를 구분 하지만 쉘 수준에서이를 내보내는 프로그램을 찾을 수 없습니다.


답변

사용하여 whoami, who am i, who, id또는 $SUDO_USER여기 없습니다.

실제로 who는 로그인 한 사용자 만 나열하기 때문에 질문에 대한 해결책이 아닙니다.

내 눈에 유일하게 귀중한 대답은 logname.

도움이 되었기를 바랍니다

Rob


답변

찾고있는 UID (도커 헛소리에 유용함)이면 다음과 같이 작동합니다.

LOCAL_USER_ID=$(id -u $(logname))