bash에서 현재 사용자의 사용자 이름을 얻습니까?
사용자의 사용자 이름을 가져와야하는 프로그램을 bash로 작성 중입니다.
나는 무엇인가에 대해 들었지만 whoami
그것이 무엇을 어떻게 사용하는지 전혀 모른다.
현재 사용자 이름을 얻기 위해 어떤 명령을 사용합니까?
명령 행에 다음을 입력하십시오.
echo "$USER"
또는
whoami
이 값을 변수에 저장하려면
myvariable=$(whoami)
또는
myvariable=$USER
물론 $USER
변수가 목적 이기 때문에 변수를 만들 필요가 없습니다 .
의 대안은 whoami
입니다 id -u -n
.
id -u
사용자 ID를 반환합니다 (예 : 루트의 경우 0).
내가 솔라리스 9와 리눅스에서 사용한 해킹으로 둘 다 잘 작동합니다.
ps -o user= -p $$ | awk '{print $1}'
이 스 니펫은 현재 EUID를 가진 사용자 이름을 인쇄합니다.
참고 : 여기서 통역자로 bash가 필요합니다.
Solaris에서는 위에서 설명한 방법에 문제가 있습니다.
id
-u
및-n
매개 변수를 허용하지 않으므로 출력을 구문 분석해야합니다.whoami
존재하지 않습니다 (기본적으로)who am I
현재 터미널의 소유자를 인쇄합니다 (EUID 무시)$USER
변수 (예 : 전용 프로파일 파일을 읽은 후 올바르게 설정/etc/profile
)
표준 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
두 가지 명령 :
id
그룹과 함께 사용자 ID를 인쇄합니다. 체재:uid=usernumber(username) ...
whoami
현재 사용자 이름을 제공합니다
스크립트를 사용할 때 일반적으로 90 % 이상인 루트 (스도) 권한이 필요한 경우 위의 방법으로 항상 root
답을 얻을 수 있습니다 .
현재 "로그인 된"사용자를 얻는 것은 간단하지만 다른 변수에 액세스해야합니다 : $SUDO_UID
및 $SUDO_USER
.
그들은 반향 될 수 있습니다 :
echo $SUDO_UID
echo $SUDO_USER
또는 할당, 예 :
myuid=$SUDO_UID
myuname=$SUDO_USER
다음과 bash/ksh/sh
같은 방법으로 많은 질문에 빠르게 답변 할 수 있습니다.
man [function]
사용중인 시스템에 대한 설명서를 얻을 수 있습니다.
또는 일반적으로 더 편리합니다 : google "man function"리눅스와 유닉스가 약간의 차이가있는 경우에는 다른 결과가 나올 수 있습니다.
이 질문에 대해서는 쉘에 "whoami"를 입력하십시오.
스크립트를 작성하려면 :
myvar=$(whoami)
Solaris OS-에서이 명령을 사용했습니다.
$ who am i # remember to use it with space.
Linux에서-누군가가 이미 의견에 답변했습니다.
$ whoami # without space
대부분의 Linux 시스템에서 명령 행에 whoami를 입력하면 사용자 ID가 제공됩니다.
그러나 Solaris에서는 아래 명령을 통해 로그인 한 사용자의 UID를 판별하여 사용자 ID를 판별해야합니다.
echo $UID
UID를 알고 나면 UID를 / etc / passwd와 일치시켜 사용자를 찾으십시오.
cat /etc/passwd | cut -d":" -f1,3
현재 사용자의 사용자 이름은 ${parameter@operator}
Bash 4.4에서 소개 된 매개 변수 확장을 사용하여 순수한 Bash에서 얻을 수 있습니다 .
$ : \\u
$ printf '%s\n' "${_@P}"
에 저장된 마지막 인수를 설정하여 임시 변수 대신 :
기본 제공 (의 동의어 true
)이 사용됩니다 $_
. 그런 다음 연산자를 \u
사용하여 프롬프트 문자열 인 것처럼 확장합니다 ( ) P
.
이것은 일반적인 환경 변수 $USER
처럼을 사용하는 것보다 낫습니다 $USER
. 의도적으로 변경되지 않았어도 여전히 잘못된 경우는 로그인 쉘을 시작하지 않고 사용자를 전환 할 때입니다 ( su
기본값).
현재 작업의 user_struct를 가져옵니다
#define get_current_user() \
({ \
struct user_struct *__u; \
const struct cred *__cred; \
__cred = current_cred(); \
__u = get_uid(__cred->user); \
__u; \
})
참고 URL : https://stackoverflow.com/questions/19306771/get-current-users-username-in-bash
'Programing' 카테고리의 다른 글
스크립트를 통해 Unix에서 파일 인코딩을 찾는 방법 (0) | 2020.03.26 |
---|---|
태그 또는 태그 지정을위한 권장 SQL 데이터베이스 디자인 (0) | 2020.03.26 |
텍스트 영역의 비정상적인 모양? (0) | 2020.03.26 |
double이 NaN과 같은지 어떻게 테스트합니까? (0) | 2020.03.26 |
더블 클릭 후 텍스트 선택 방지 (0) | 2020.03.26 |