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


108

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

#!/bin/bash
whoami

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

root

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

답변:


134

.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이라고합니다.


2
예, +1 who am i이 여기에 대한 답입니다.
Joe Kearney

43
의 대안은 who am i입니다 who mom likes. 당신의 선택.
wchargin 2014-08-31

3
who두 줄 모두 내 이름을 포함하고 who am i아무것도 반환하지 않습니다. 도움이 필요하세요?
Hosh Sadiq 2014 년

7
나는 우분투 16.04에 있고 명령 who am i은 아무것도하지 않는다. 간단하게 보인다 who. 그래서 who | awk '{print $1}'예상대로 작동한다;)
daveoncode

1
당신이하지 않는 그냥 넣다 awk설치, 당신은 또한 사용할 수 있습니다 cut: who mom likes | cut -d' ' -f1 또는 sed몇 가지 이유 : who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
Yzmir 라미레즈

56

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

#!/bin/bash
echo $SUDO_USER
whoami

1
이상한 일 : sudo envSUDO_USER그러나 sudo echo $SUDO_USER인쇄 아무것도 ...
작업

17
직업, 이것은 이상하지 않습니다. 에서 sudo echo $SUDO_USERbash는 sudo 실행 하기 전에 $ SUDO_USER 평가 합니다. 이 솔루션에 게시 된 스크립트를 사용해보십시오.

@quadmore : 답변이 만족 스러우면 수락하는 것을 잊지 마십시오.
욥기

2
를 사용 echo ${SUDO_USER:-$USER}하여 수도가 sudo아닌 실행을 모두 잡을 수도 있습니다 . 그러나 에반의 대답 logname 소리 easer
토비아스 Kienzler

2
@TobiasKienzler-에반이 지적했듯이는에서 $SUDO_USER작동하지 sudo su -않지만 logname항상 작동합니다.
David Harkness 2013 년

13

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

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

또는 더 짧은 버전

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

8
더 짧게 : user=${SUDO_USER:-$(whoami)}또는user=$(logname)
Tobias Kienzler 2013

3

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


1
아니 둘 이상의 사용자 세션을 가진 호스트
로마 Grazhdan


1

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

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

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

도움이 되었기를 바랍니다

Rob


0

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

LOCAL_USER_ID=$(id -u $(logname))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.