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 jon
meu nome de usuário. Existe uma maneira de fazer isso alterando o script e não o comando?
Responder1
Use a SUDO_USER
variável de ambiente em vez de USER
.
sudo
coloca o nome do usuário que o executou na SUDO_USER
variá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 $USER
no $SUDO_USER
seu script:
echo $SUDO_USER
Leitura adicional
man sudo
, na seção “MEIO AMBIENTE”:SUDO_USER Set to the login name of the user who invoked sudo.
A página de manual também descreve algumas outras variáveis de ambiente relacionadas definidas por
sudo
que podem ser úteis, comoSUDO_UID
eSUDO_GID
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 sudo
contexto ou não:
echo "${SUDO_USER:-$USER}"
Isso se expande para o valor de $SUDO_USER
por 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.