$ USERNAME 변수를 설정해도 효과가 없습니다.


2

USERNAME 변수를 설정해도 효과가 없습니다. 변수에 액세스하면 항상 현재 로그인 한 사용자를 반환합니다.

james@localhost:~$ USERNAME=foo
james@localhost:~$ echo $USERNAME
james

이 동작을 설명하는 참조 또는 문서를 찾을 수 없습니다. $ USERNAME이 일종의 특수 변수 인 것처럼 보입니다. 다른 사람이 있습니까? 이것은 어디에 문서화 또는 설명되어 있습니까?


1
여기에 재현되지 않았습니다. 당신은 어떤 껍질에 있습니까?
把 友情 留 在 无 盐

답변:


1

Z Shell을 사용하고있는 것 같습니다 . 적어도 설명하는 동작은 재현 할 수 있습니다.

zsh$ echo $USERNAME
user1
zsh$ USERNAME=test
zsh$ echo $USERNAME
user1
zsh$ 

zshparam 맨 페이지 에 이유가 있습니다.

USERNAME 쉘 프로세스의 실제 사용자 ID에 해당하는 사용자 이름. 충분한 권한이 있으면이 매개 변수에 지정하여 쉘의 사용자 이름 (및 사용자 ID 및 그룹 ID)을 변경할 수 있습니다. 또한 충분한 권한이 있다고 가정하면`(USERNAME = username; command) '에 의해 다른 사용자 이름 (및 사용자 ID 및 그룹 ID)으로 단일 명령을 시작할 수 있습니다.

그래서, 같은 예 충분한 권한을 가진 루트 이 작동하지만, 경우에만이 user1A는 유효한 사용자 이름 :

su
zsh# echo $USERNAME
root
zsh# USERNAME=user1
zsh#  echo $USERNAME
user1
zsh# id
uid=1001(user1) gid=1000(users)   
groups=1000(users),...

그리고 네, 다른 특수 변수가 있습니다.에서 <S>표시를 찾으십시오 man zshparam. 몇 가지 예만 언급하십시오.

  • $? 마지막 명령이 리턴 한 종료 상태
  • $$ 이 쉘의 프로세스 ID
  • $EGID 쉘 프로세스의 유효 그룹 ID
  • $SECONDS 쉘 호출 이후의 시간 (초)

이것은 실제로 zsh입니다. 방금 최근에 zsh로 전환했는데 스크립트가 USERNAME이라는 변수를 사용하기 때문에 스크립트가 더 이상 예상대로 실행되지 않는 이유를 이해하는 데 꽤 오랜 시간이 걸렸습니다 ... :-|
James

@ 제임스 : 스크립트를 소스 코드를 제외하고 스크립트 #!/bin/bash라인에 ;)사용해야합니다 .
mpy

나는 확실히 세방 라인을 추가 할 것입니다!
James

0

USER 및 LOGNAME은 envron (7) 맨 페이지에서 해결됩니다. login (1)은 이러한 변수를 설정하는 프로세스입니다 .

USER 및 LOGNAME 변수를 모두 수정할 수 있으며 나중에 액세스하면 새 값을 반환합니다.

어디에서나 USERNAME에 대한 참조를 찾으십시오.이 변수는 bash4.3에 설정되어 있지 않습니다. bash는 UID 읽기 전용 숫자 변수를 정의합니다. bash에서이 변수를 변경하려는 시도가 실패합니다.

리눅스 맨 페이지 는 USER가 "일부 BSD 파생 프로그램에서 사용된다"고 말하고 LOGNAME은 "일부 System-V 파생 프로그램에서 사용됨"과 애플 맨 페이지 주장 USER가 더 이상 사용되지 않습니다.

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