bash 스크립트를 실행 한 사용자의 이름을 sudo로 얻는 방법은 무엇입니까?


17

sudo로 실행해야하지만 실행 한 sudo가 아닌 사용자의 이름을 고려해야하는 bash 스크립트를 만들고 싶습니다. 따라서 사용자 bob가 실행하면 실행 한 사람 인지 알고 sudo ./myscript.sh싶습니다 .myscript.shbob

내부를 살펴 봅시다 myscript.sh:

USER=$(whoami)
# Do something that takes into account the username.

프로세스를 생성 한 사용자의 이름을 어떻게 알 수 있습니까? 보다 구체적으로는, 내가 대신 무엇을 사용해야 whoami얻을 bob하지 root?


그것은 유효한 스크립트가 아닙니다 USER=$(whoami). (가) 있습니다 USER이미 쉘 내부 변수로 존재한다. 또한 bash 스크립트 인 경우 POSIX 호환 기능의 하위 집합 만있는를 사용하여 실행 하지 마십시오sh .
nyuszika7h

왜 편집하지 않습니까? 지금 해결되었습니다.
marcio 2016 년

너무 사소한 편집은 적어도 6 자 이상이어야하며 적어도 추천 된 것이어야합니다.
nyuszika7 시간

알았어요 팁 주셔서 감사합니다 : DI는 일반적 #!/usr/bin/env bash으로 내 bash 스크립트에 이와 같은 해시 뱅을 넣습니다 .
marcio 2016 년

해시 뱅은 명시 적으로 호출 sh하거나 다른 것을 호출하면 무시됩니다 .
nyuszika7h

답변:


28

표준이 얼마나 확실하지는 않지만 적어도 우분투 시스템 sudo에서는 다음과 같은 환경 변수를 설정합니다 ( ENVIRONMENTsudo 맨 페이지 섹션 참조 ).

   SUDO_UID        Set to the user ID of the user who invoked sudo

   SUDO_USER       Set to the login of the user who invoked sudo

예를 들어

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver

내가 테스트 한 모든 플랫폼에서 예상대로 작동합니다 : debian, fedora (redhat) 및 freebsd. 감사!
marcio 2016 년

Mac에서 작동하는 것으로 확인되었습니다.
SiKing

우분투에서도 작동합니다.
Andi Jay

9

sudo잘 작동하지 않으려면을 사용하십시오 ${SUDO_USER:-$USER}. 예를 들면 다음과 같습니다.

printf '%s\n' "${SUDO_USER:-$USER}"

설명

${var:-val}$var설정되어 있지 않거나 비어 있지 않으면으로 확장됩니다 val. 이 경우으로 확장됩니다 .

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