Bash에서 사용자의 사용자 이름을 가져와야하는 프로그램을 작성 중입니다.
나는이라는 것을 들었지만 whoami
그것이 무엇을 어떻게 사용하는지 전혀 모른다.
현재 사용자 이름을 얻기 위해 어떤 명령을 사용합니까?
man whoami
일반적으로 확인은 문서를 확인하는 첫 번째 중지 지점입니다.
Bash에서 사용자의 사용자 이름을 가져와야하는 프로그램을 작성 중입니다.
나는이라는 것을 들었지만 whoami
그것이 무엇을 어떻게 사용하는지 전혀 모른다.
현재 사용자 이름을 얻기 위해 어떤 명령을 사용합니까?
man whoami
일반적으로 확인은 문서를 확인하는 첫 번째 중지 지점입니다.
답변:
명령 행에 다음을 입력하십시오.
whoami
또는
echo "$USER"
이 값을 변수에 저장하려면
myvariable=$(whoami)
또는
myvariable=$USER
물론 $USER
변수가 목적 이기 때문에 변수를 만들 필요가 없습니다 .
$USER
전혀 설정되어 있지 않습니다. 게다가 환경 변수 일 뿐이므로 사용자가이를 대체 할 수 있습니다.USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(당신이 제안한대로) 사용 하면 재정의 된 환경 변수가 컨텍스트에서 잠재적 인 문제라고 가정하면 문제가 완전히 제거됩니다.
의 대안은 whoami
입니다 id -u -n
.
id -u
사용자 ID를 반환합니다 (예 : root의 경우 0 ).
"${USER}"
그리고 whoami
모두가 로그인하는 방법에 따라 달라집니다. 특히, 로그인 쉘과는 sudo는 $ USER 및 설정합니다 whoami
표준 입력에 연결된 사용자의 모습을. 그러나 cron에서 배치 작업을 실행 중이거나 루트와 다른 사용자로 시작 스크립트를 실행중인 경우 잘못된 사용자 (루트)가 출력되거나 전혀 출력되지 않습니다. 이 답변은 프로세스의 사용자 ID를 보더라도 올바른 값을 반환합니다.
-n
, 원래 질문과 같이 인수가 사용자 이름을 인쇄한다는 것을 알 수 있습니다. 다음을 참조하십시오 : id -u -n
인쇄 brett
– 심지어 다윈에서도 가능합니다.
표준 Unix / Linux / BSD / MacOS 명령 logname
을 사용하여 로그인 한 사용자를 검색하십시오. 이것은 신뢰할 수없는 기자이기 때문에 sudo뿐만 아니라 환경도 무시합니다. 항상 로그인 한 사용자 이름을 인쇄 한 다음 종료합니다. 이 명령은 약 1981 년부터 사용되었습니다.
My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ sudo logname
Password:
devin
My-Mac:~ devin$ sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root
내가 솔라리스 9와 리눅스 에서 사용한 해킹 으로 둘 다 잘 작동합니다.
ps -o user= -p $$ | awk '{print $1}'
이 스 니펫은 현재 EUID를 가진 사용자 이름을 인쇄합니다.
노트: 여기서 통역사로 Bash가 필요합니다.
Solaris에서는 위에서 설명한 방법에 문제가 있습니다.
id
-u
및 -n
매개 변수를 승인하지 않으므로 출력을 구문 분석해야합니다.whoami
존재하지 않습니다 (기본적으로)who am I
현재 터미널의 소유자를 인쇄합니다 (EUID 무시)$USER
변수는 프로파일 파일을 읽은 후에 만 올바르게 설정됩니다 (예 /etc/profile
:)ps
명령은 현재 쉘의 pid 소유자를 표시하는 데 필요한 모든 것입니다.
command -p id
(POSIX 쉘에서) 또는을 사용하십시오 /usr/xpg4/bin/id
. 보다 일반적으로, Solaris에서는 70s / 80의 명령이 걸리지 않도록 POSIX 환경 ( PATH=
getconf PATH와 같은 환경 에서 실행하고 반드시 실행 /usr/xpg4/bin/sh
)에 들어가 도록 환경을 수정하려고합니다 .
두 가지 명령 :
id
그룹과 함께 사용자 ID를 인쇄합니다. 체재:uid=usernumber(username) ...
whoami
현재 사용자 이름을 제공합니다
스크립트를 사용할 때 일반적으로 90 % 이상인 루트 (스도) 권한이 필요한 경우 이전 답변의 방법이 항상 답변으로 제공 root
됩니다.
현재 "로그인 된"사용자를 얻는 것은 간단하지만 다른 변수에 액세스해야합니다 : $SUDO_UID
및 $SUDO_USER
.
그들은 반향 될 수 있습니다 :
echo $SUDO_UID
echo $SUDO_USER
또는 예를 들어 다음과 같이 할당됩니다.
myuid=$SUDO_UID
myuname=$SUDO_USER
현재 사용자의 사용자 이름은 ${parameter@operator}
Bash 4.4에서 소개 된 매개 변수 확장으로 순수 Bash에서 얻을 수 있습니다 .
$ : \\u
$ printf '%s\n' "${_@P}"
에 저장된 마지막 인수를 설정하여 임시 변수 대신 :
내장 true
함수 (의 동의어 )가 사용됩니다 $_
. 그런 다음 \u
프롬프트 문자열이있는 것처럼 확장 ( )합니다.P
연산자를 .
이것은 일반적인 환경 변수 $USER
처럼을 사용하는 것보다 낫습니다 $USER
. 의도적으로 변경되지 않았어도 여전히 잘못된 경우는 로그인 쉘을 시작하지 않고 사용자를 전환 할 때입니다 ( su
기본값).
에 대부분의 리눅스 시스템, 단순히 입력 whoami를 명령 줄에서하면 사용자 ID를 제공합니다.
그러나 Solaris에서는 아래 명령을 통해 로그인 한 사용자의 UID를 판별하여 사용자 ID를 판별해야합니다.
echo $UID
UID가 알려지면 UID를 /etc/passwd
파일 과 일치시켜 사용자를 찾으십시오 .
cat /etc/passwd | cut -d":" -f1,3
현재 작업의 user_struct를 가져옵니다
#define get_current_user() \
({ \
struct user_struct *__u; \
const struct cred *__cred; \
__cred = current_cred(); \
__u = get_uid(__cred->user); \
__u; \
})