Variável de ambiente para nome de usuário

5

Qual é o equivalente em Linux de% username%?

Eu preciso executar um script em várias caixas Linux a cada poucos dias. Eu fiz um arquivo .sh, e funciona bem. O script exclui alguns arquivos em um determinado caminho. O problema é que o caminho inclui o nome de usuário (não, não em / home), que é diferente em cada máquina.

Por enquanto, eu simplesmente modifiquei o script em cada máquina para corresponder ao nome de usuário usado lá. Mas eu quero ter um script que funcione, sem precisar modificá-lo.

Então: o Linux tem essas funções? Duh, tenho certeza que sim, você noob ....

    
por Dr.Ping 25.07.2016 / 17:19

4 respostas

11

A variável de ambiente da versão do Linux para se referir ao usuário atual é USER .

Para obter a saída que você gostaria de ver, use $USER em seu comando:

echo $USER

E para usá-lo em outra string, como um caminho:

/path/with/$USER/in/it

Expandirá o nome de usuário na string. Embora você deva proteger as expansões de variáveis com chaves quando uma variável está diretamente ao lado de outros caracteres. Não é tão importante neste exemplo como a variável USER é limitada por caracteres não alfanuméricos, mas seria importante no seguinte caso:

/path/to/${USER}directory

(Obrigado ao ByteCommander pela dica nos comentários)

Outra informação útil é $HOME para o diretório pessoal do usuário.

    
por Arronical 25.07.2016 / 17:22
11
$USER

mudará para o seu nome de usuário.

Exemplo

rinzwind@schijfwereld:~$ echo $USER
rinzwind

Existem mais ...

~$ cd /tmp
:/tmp$ echo $HOME
/home/rinzwind
:/tmp$ echo $PWD
/tmp
$ echo $HOSTNAME
schijfwereld

Para listar os valores atuais de todas as variáveis de ambiente:

env

Tenha em mente que os nomes das variáveis fazem distinção entre maiúsculas e minúsculas

Para expandir isso. Você também pode criar o seu próprio:

export var=value

irá criar $ var com valor.

$ export var=1111
rinzwind@schijfwereld:~$ echo $var
1111
    
por Rinzwind 25.07.2016 / 17:22
9

Pode haver uma ressalva se você planeja ler a variável de ambiente $USER em um comando que começa com sudo .

A expansão da variável Bash ocorre antes de executar sudo para alternar usuários, o que significa que a variável $USER é lida a partir do ambiente atual antes que sudo mude para a raiz.

$ echo $USER
bytecommander

$ sudo echo $USER
bytecommander

Se isso não for intencional e você precisar de um método que retorne o nome do usuário como ele realmente é executado (normalmente "root"), você tem pelo menos três opções para conseguir isso:

  • Execute um interpretador bash como root e passe o comando que contém $USER . Você deve certificar-se de que o comando esteja entre aspas simples para evitar que o interpretador atual do Bash faça a expansão da variável:

    sudo bash -c 'echo $USER'
    
  • Use uma saída de comando em vez da variável de ambiente $USER .

    Existem basicamente dois comandos que seriam úteis aqui, whoami e id -un :

    $ whoami
    bytecommander
    
    $ sudo whoami
    root
    
    $ id -un
    bytecommander
    
    $ sudo id -un
    root
    

    Mais informações sobre esses comandos podem ser encontradas digitando man whoami e man id .

Você pode usar esses comandos como uma variável e incorporá-los em uma string (por exemplo, um caminho de diretório) como este, usando a sintaxe de substituição de comando do Bash. Aqui estão dois exemplos que cd em um diretório nomeado após o usuário atual:

cd /path/to/$(whoami)folder
cd /path/to/$(id -un)folder
    
por Byte Commander 25.07.2016 / 19:16
3

Como as outras respostas dizem, $USER é geralmente definido para o nome da conta de usuário atual.

Mas pelo menos no meu sistema (Ubuntu 14.04), a variável de ambiente $USER não é definida para trabalhos agendados. Em vez disso, você pode usar $LOGNAME , que é parte do ambiente para trabalhos agendados.

De acordo com a página environ(7) man (digite man environ para lê-lo), $USER é usado por programas derivados do BSD e $LOGNAME é usado por programas derivados do System-V. Eles devem ter o mesmo valor se ambos estiverem definidos. A existência de ambos é um acidente histórico. (Pode haver casos em que $USER está definido e $LOGNAME não é, mas eu não sei de nenhum.)

A página environ man também documenta várias outras variáveis de ambiente comuns. (Não documenta todas variáveis de ambiente porque seria impossível fazê-lo.)

    
por Keith Thompson 26.07.2016 / 02:19

Tags