Por que quando troco de usuário su <username>
e, em seguida, executo, who am i
gera o usuário anterior no qual eu estava logado e não aquele para o qual mudei?
9
Você provavelmente está executando o comando errado.
who
serve para mostrar quem está logado, ou seja, qual usuário é o proprietário do terminal. Retorna uma linha como esta:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
serve para mostrar qual é o ID do usuário efetivo da pessoa que o executa. Ele retorna apenas um único nome, como este (e é equivalente à execução id -un
):
ckhan
Eu acho que você pode ter digitado literalmente who am i
no terminal, que rodava who
com dois argumentos ignorados ( am
, i
).
Veja man who
e man whoami
para mais detalhes.
am
ei
não são ignorados, eles são especificados até pelo POSIX: "No código do idioma POSIX, limite a saída para descrever o usuário que está chamando, equivalente à-m
opção".De acordo com minha página de manual do Ubuntu 12.04.2, o comando 'who', quem sou eu (ou quem com dois argumentos) é o mesmo que 'who -m' e deve fornecer o nome do host e o usuário associado ao STDIN. No entanto, não recebo saída com 'quem sou eu'. A página de manual está incorreta ou o comando possui um erro. Independentemente disso, conforme respondido anteriormente por ckhan, o comando 'whoami' fornecerá o nome de usuário para seu ID de usuário efetivo. Pelo menos no Ubuntu 12.04.2, nenhum dos id, 'quem sou eu' ou 'whoami' fornecerá apenas o nome de usuário da pessoa logada no terminal atual. Como solução alternativa, você pode obter isso com:
fonte
Solução alternativa :
que funciona como substituto de
who am i | awk '{print $1}'
. Explicação abaixo:Em muitos sistemas "
who am i
" é equivalente a "who -m
". O problema aqui é que, com alguns terminais , "who -m
" não retorna nada!Exemplo # 1 executado a partir de um terminal xfce4
mas o exemplo 2 de um terminal gnome (o mesmo computador, os mesmos comandos)
Isso parece ser uma conseqüência do gnome-terminal não adicionar entradas utmp…
fonte
stat
vez disso, use :stat -c '%U' "$(tty)"
você provavelmente também não deve analisarwho am i
, pois os nomes de usuário podem conter espaços em alguns casos raros.