다음을 /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]
합니다. 또한 횟수에 관계없이 작동 su
및 sudo
이라고합니다.
답변
답변
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))