Parece que nenhum dos métodos propostos até o momento funciona sem depender de US $ USER ou invocar um processo separado. Não há bash embutido para obter o nome de usuário sem chamar um processo separado?
ColinM
9
Quando você ouvir um comando, mas não tiver certeza de como usá-lo, a verificação man whoamigeralmente é uma boa primeira parada para verificar a documentação.
Mark Stosberg
Respostas:
470
Na linha de comandos, insira
whoami
ou
echo "$USER"
Para salvar esses valores em uma variável, faça
myvariable=$(whoami)
ou
myvariable=$USER
Obviamente, você não precisa criar uma variável, pois é para isso que serve a $USERvariável.
Apenas uma observação rápida de que $ USER e whoami retornam valores diferentes se você estiver executando um comando através do ssh como outro usuário. whoami retorna o usuário do sistema operacional e $ USER retorna o usuário ssh.
Billman
4
@ BillMan, o que isso significa? Você poderia dar um exemplo?
precisa saber é o seguinte
17
Em alguns casos, $USERnão está definido. Pior, é apenas uma variável de ambiente, para que possa ser substituída pelo usuário:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
sitaktif
1
@sitaktif O que você sugere como solução para este problema?
SethMMorton
3
@SethMMorton Sei que fiz o problema parecer pior do que normalmente é. Para responder à pergunta, porém, o uso whoami(como sugerido) elimina completamente o problema, assumindo que as variáveis de ambiente substituídas sejam um problema em potencial no seu contexto.
26515 sitaktif
81
Uma alternativa para whoamié id -u -n.
id -uretornará o ID do usuário (por exemplo, 0 para root ).
Se não me engano este seria o caminho a percorrer se a portabilidade é uma preocupação como o idcomando e -ue -nbandeiras são uma parte de posix
3
Esta realmente deve ser a resposta aceita. "${USER}"e whoamiambos dependem de como você efetua login. Especificamente, shells de login e sudo definirão $ USER e whoamiexaminam o usuário conectado ao stdin. No entanto, se você estiver executando um trabalho em lotes a partir do cron ou executando um script de inicialização como um usuário diferente do root, eles produzirão o usuário errado (root) ou nada. Esta resposta retornará o valor correto, independentemente, observando o ID do usuário do processo.
Asfand Qazi
Isso não é útil se você quiser o nome de usuário em vez do id
Jonathan
3
se você tentasse o comando antes de adicionar comentários falsos, veria que o -nargumento imprime o nome de usuário, exatamente como a pergunta original. veja o seguinte: id -u -nimpressões brett- mesmo em darwin.
Brett
20
Use o comando Unix / Linux / BSD / MacOS padrão lognamepara recuperar o usuário conectado. Isso ignora o ambiente e o sudo, pois são repórteres não confiáveis. Ele sempre imprimirá o nome do usuário conectado e sairá. Este comando existe desde 1981.
Por que você precisa do bash como intérprete? Nada na linha de comando mostrada parece ser específico para qualquer shell. De fato, por que incluir o tubo no awk? Pelo que sei, seu pscomando é tudo o que é necessário para exibir o proprietário do pid atual do shell.
ghoti
Para nós, humanos, desconsiderar a informação supérflua é natural. A parte awk isola os dados desejados - para variáveis ou, em geral, o computador que ainda não pode fazer suposições dinâmicas neste nível rudimentar.
BradChesney79
No Solaris, use command -p id(de um shell POSIX) ou /usr/xpg4/bin/id. De maneira mais geral, no Solaris, você deseja modificar seu ambiente para se colocar em um ambiente POSIX (com algo como PATH=getconf PATH` e certifique-se de executar /usr/xpg4/bin/sh) para evitar ficar preso aos comandos dos anos 70/80.
Stephane Chazelas
'ps: opção desconhecida - o'
Anand Rockzz 30/01
12
Dois comandos:
id imprime a identificação do usuário junto com os grupos. Formato:uid=usernumber(username) ...
$ whoami não está disponível como uma variável no bash. Você precisa fazer $ (whoami) ou `whoami` para realmente executar o comando whoami!
Rudolf Mayer
@RudolfMayer I fix it it
wjandrea
6
Quando são necessárias permissões root (sudo), que geralmente são 90% + ao usar scripts, os métodos nas respostas anteriores sempre fornecem root a resposta.
Obter o usuário "logado" atual é tão simples quanto isso, mas é necessário acessar diferentes variáveis: $SUDO_UIDe$SUDO_USER .
O nome de usuário do usuário atual pode ser obtido no Bash puro com a ${parameter@operator}expansão de parâmetro (introduzida no Bash 4.4):
$ : \\u
$ printf '%s\n'"${_@P}"
O :interno (sinônimo de true) é usado em vez de uma variável temporária, definindo o último argumento, armazenado em $_. Em seguida, expandimos ( \u) como se fosse uma string de prompt com o Poperador.
Isso é melhor do que usar $USER, pois $USERé apenas uma variável ambiental regular; ele pode ser modificado, desabilitado, etc. Mesmo que não seja intencionalmente violado, um caso comum em que ainda está incorreto é quando o usuário é alternado sem iniciar um shell de login ( suo padrão).
A questão era sobre como obter o nome de usuário dentro de um script bash. Esta resposta é sobre como obter o ID do usuário numérico (não o nome de usuário) do código C em execução no kernel do Linux (como em um módulo do kernel do Linux personalizado). Não é uma resposta para a pergunta que foi feita, é uma resposta para uma pergunta diferente.
man whoami
geralmente é uma boa primeira parada para verificar a documentação.Respostas:
Na linha de comandos, insira
ou
Para salvar esses valores em uma variável, faça
ou
Obviamente, você não precisa criar uma variável, pois é para isso que serve a
$USER
variável.fonte
$USER
não está definido. Pior, é apenas uma variável de ambiente, para que possa ser substituída pelo usuário:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(como sugerido) elimina completamente o problema, assumindo que as variáveis de ambiente substituídas sejam um problema em potencial no seu contexto.Uma alternativa para
whoami
éid -u -n
.id -u
retornará o ID do usuário (por exemplo, 0 para root ).fonte
id
comando e-u
e-n
bandeiras são uma parte de posix"${USER}"
ewhoami
ambos dependem de como você efetua login. Especificamente, shells de login e sudo definirão $ USER ewhoami
examinam o usuário conectado ao stdin. No entanto, se você estiver executando um trabalho em lotes a partir do cron ou executando um script de inicialização como um usuário diferente do root, eles produzirão o usuário errado (root) ou nada. Esta resposta retornará o valor correto, independentemente, observando o ID do usuário do processo.-n
argumento imprime o nome de usuário, exatamente como a pergunta original. veja o seguinte:id -u -n
impressõesbrett
- mesmo em darwin.Use o comando Unix / Linux / BSD / MacOS padrão
logname
para recuperar o usuário conectado. Isso ignora o ambiente e o sudo, pois são repórteres não confiáveis. Ele sempre imprimirá o nome do usuário conectado e sairá. Este comando existe desde 1981.fonte
Um truque que usei no Solaris 9 e Linux e que funciona bem para os dois:
Esse trecho imprime o nome do usuário com o EUID atual.
NOTA: você precisa do Bash como intérprete aqui.
No Solaris, você tem problemas com os métodos descritos acima:
id
não aceita os parâmetros-u
e-n
(assim você terá que analisar a saída)whoami
não existe (por padrão)who am I
imprime o proprietário do terminal atual (ignora o EUID)$USER
A variável é configurada corretamente somente após a leitura dos arquivos de perfil (por exemplo,/etc/profile
)fonte
ps
comando é tudo o que é necessário para exibir o proprietário do pid atual do shell.command -p id
(de um shell POSIX) ou/usr/xpg4/bin/id
. De maneira mais geral, no Solaris, você deseja modificar seu ambiente para se colocar em um ambiente POSIX (com algo comoPATH=
getconf PATH` e certifique-se de executar/usr/xpg4/bin/sh
) para evitar ficar preso aos comandos dos anos 70/80.Dois comandos:
id
imprime a identificação do usuário junto com os grupos. Formato:uid=usernumber(username) ...
whoami
fornece o nome de usuário atualfonte
Quando são necessárias permissões root (sudo), que geralmente são 90% + ao usar scripts, os métodos nas respostas anteriores sempre fornecem
root
a resposta.Obter o usuário "logado" atual é tão simples quanto isso, mas é necessário acessar diferentes variáveis:
$SUDO_UID
e$SUDO_USER
.Eles podem ser ecoados:
Ou atribuído, por exemplo:
fonte
No Solaris OS, usei este comando:
No Linux - Alguém já respondeu isso nos comentários.
fonte
Para Bash , KornShell (
ksh
),sh
etc. Muitas de suas perguntas são respondidas rapidamente por:para obter a documentação do sistema que você está usando ou geralmente de maneira mais conveniente:
google "função homem"
Isso pode dar resultados diferentes para algumas coisas em que o Linux e o Unix têm diferenças modestas.
Para esta pergunta, basta digitar "whoami" no seu shell.
Para criar um script:
fonte
O nome de usuário do usuário atual pode ser obtido no Bash puro com a
${parameter@operator}
expansão de parâmetro (introduzida no Bash 4.4):O
:
interno (sinônimo detrue
) é usado em vez de uma variável temporária, definindo o último argumento, armazenado em$_
. Em seguida, expandimos (\u
) como se fosse uma string de prompt com oP
operador.Isso é melhor do que usar
$USER
, pois$USER
é apenas uma variável ambiental regular; ele pode ser modificado, desabilitado, etc. Mesmo que não seja intencionalmente violado, um caso comum em que ainda está incorreto é quando o usuário é alternado sem iniciar um shell de login (su
o padrão).fonte
Na maioria dos sistemas Linux, basta digitar whoami na linha de comandos para fornecer o ID do usuário.
No entanto, no Solaris, pode ser necessário determinar o ID do usuário, determinando o UID do usuário conectado através do comando abaixo.
Depois que o UID for conhecido, encontre o usuário combinando o UID com o
/etc/passwd
arquivo.fonte
Obter o user_struct da tarefa atual
fonte