Respostas:
Nas variáveis de ambiente ,
$LOGNAME
é o mesmo $USER
que dá
O nome do usuário conectado no momento. Esta variável é definida pelo sistema. Você provavelmente não deve alterar seu valor manualmente.
A partir de man logname
logname - imprime o nome de login do usuário
Expained usado de forma diferente pelo seguinte exemplo:
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
Aqui você pode ver a diferença após o login como root no terminal,
$LOGNAME
fornece o nome do usuário atualmente conectado no terminal (ie root
)logname
imprima o nome de login do usuário que efetuou login na sessão (ou seja pandya
)O nome do log do utilitário foi quebrado no 16.04, aparentemente de propósito, porque é possível hackear o valor que ele retorna, o que poderia ser uma falha de segurança. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Eu estava usando o nome do log em alguns scripts e achei útil porque sempre retornava o mesmo valor (meu nome de login), independentemente de eu estar ligando de um meu próprio nível ou de uma chamada de sudo, enquanto as variáveis de ambiente $ USER e $ LOGNAME não. Eu não estava preocupado com alguém invadir meu computador e modificar o valor que ele retorna. Infelizmente .... Encontrei uma solução alternativa. Criei um arquivo no meu diretório pessoal, como tal
echo $USER > ~/.logname
Quando quero acessar meu nome de log (por exemplo, atribuindo a uma variável Bash g_logname), faço-o da seguinte maneira:
declare g_logname="$(<~/.logname)";
Isso funciona para mim, seja eu mesmo ou no nível raiz através do sudo, que mantém a atribuição de "~" como meu diretório pessoal. Eu posso criar um arquivo .logname para o diretório inicial de cada usuário no sistema. Sim, alguém poderia invadir meu computador e alterar esses arquivos, mas não estou realmente preocupado com isso. Eu só quero que meus scripts funcionem.