Eu tive um problema semelhante há um tempo atrás, e a única maneira que funcionou de forma confiável para mim até agora é:
echo ${SUDO_USER:-${USER}}
Desde que o usuário trabalhe com o shell como ele mesmo, $USER
contém seu nome de usuário. Quando ele chama sudo
, para o novo subshell $SUDO_USER
é definido como o que é $USER
no shell de chamada, e $USER
se torna root
, é claro.
O truque com o operador :-
é que a expressão inteira é avaliada como $SUDO_USER
se estiver definida (portanto, dentro da subshell aberta por sudo
) e, de outra forma, $USER
. Portanto, você sempre tem o nome de usuário correto e não precisa se preocupar muito com o contexto em que a expressão é avaliada, o que achei conveniente.