Posso acessar a variável $USER de origem de dentro de um script executado com `sudo`?

Posso acessar a variável $USER de origem de dentro de um script executado com `sudo`?

Uma pergunta estranha, eu sei. Aqui está o roteiro:

echo $USER

Aqui está o comando que uso para executá-lo:

sudo ./myscript.sh

No momento ele imprime "root", mas quero que imprima jonmeu nome de usuário. Existe uma maneira de fazer isso alterando o script e não o comando?

Responder1

Use a SUDO_USERvariável de ambiente em vez de USER.

sudocoloca o nome do usuário que o executou na SUDO_USERvariável de ambiente:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

Então você pode simplesmente substituir $USERno $SUDO_USERseu script:

echo $SUDO_USER

Leitura adicional

Responder2

Além deResposta de @Eliah Kagan acima, gostaria de salientar que você também pode facilmente ter uma expansão que funcione tanto se for executada em um sudocontexto ou não:

echo "${SUDO_USER:-$USER}"

Isso se expande para o valor de $SUDO_USERpor padrão, mas se essa variável não estiver definida ou estiver vazia, ela retornará ao valor de $USER.

$ bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

$ sudo bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

Mais informações sobre a expansão de parâmetros padrão no Bash podem ser encontradas, por exemplo, emhttps://wiki.bash-hackers.org/syntax/pe#use_a_default_value.

informação relacionada