Definir a variável $ USERNAME não tem efeito

2

Definir a variável USERNAME não tem efeito. Acessar a variável sempre retorna o atual usuário logado.

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

Não encontrei nenhuma referência ou documentação que explique esse comportamento. Parece que $ USERNAME é algum tipo de variável especial. Existem outros? Onde isso é documentado ou explicado?

    
por James 31.03.2015 / 10:20

2 respostas

1

Parece que você está usando o Z Shell , pelo menos o comportamento que você está descrevendo é reproduzível lá:

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

A página de manual zshparam indica o motivo:

USERNAME The username corresponding to the real user ID of the shell process. If you have sufficient privileges, you may change the username (and also the user ID and group ID) of the shell by assigning to this parameter. Also (assuming sufficient privileges), you may start a single command under a different username (and user ID and group ID) by '(USERNAME=username; command)'

Portanto, com privilégios suficientes, por exemplo como root isso funciona, mas somente se user1 for um nome de usuário válido :

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

E sim, existem outras variáveis especiais, procure a marcação <S> em man zshparam , apenas para mencionar alguns exemplos:

  • $? status de saída retornado pelo último comando
  • $$ ID do processo deste shell
  • $EGID ID de grupo eficaz do processo de shell
  • $SECONDS número de segundos desde a invocação do shell
por 31.03.2015 / 12:25
0

USER e LOGNAME são endereçados na página man do envron (7). login (1) é o processo que define essas variáveis .

as variáveis USER e LOGNAME podem ser modificadas e o acesso posterior retorna o novo valor.

não encontra em lugar algum a referência para USERNAME e esta variável não está definida em bash4.3. bash define uma variável numérica readonly de UID. tentativa de mudar essa variável no bash falha.

página de manual do linux diz que o USUÁRIO "é usado por alguns desenvolvedores derivados do BSD               programas "enquanto LOGNAME" é usado por algum derivado do System-V               programas "e página de inicialização da Apple solicitam que o usuário descontinue.

    
por 31.03.2015 / 11:31