Quero criar um script bash que deve ser executado com o sudo, mas deve levar em consideração o nome do usuário que não o executou. Portanto, se o usuário bob
executa, sudo ./myscript.sh
eu gostaria myscript.sh
de saber quem bob
foi o responsável pela execução.
Vamos olhar para dentro myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Como posso saber o nome do usuário que gerou o processo? Mais especificamente, o que devo usar em vez de whoami
obter bob
e não root
?
bash
shell-script
sudo
users
marcio
fonte
fonte
USER=$(whoami)
. Observe que oUSER
já existe como uma variável interna do shell. Além disso, se for um script bash, não o executesh
, que possui apenas um subconjunto de recursos compatíveis com POSIX.#!/usr/bin/env bash
nos meus scripts do bash.sh
ou qualquer outra coisa.Respostas:
Não sei ao certo como é padrão, mas pelo menos nos sistemas Ubuntu
sudo
define as seguintes variáveis de ambiente (entre outras - veja aENVIRONMENT
seção da página de manual do sudo):por exemplo,
fonte
Se você quiser que ele funcione sem
sudo
, use${SUDO_USER:-$USER}
. Por exemplo:Explicação
${var:-val}
será expandido para$var
, a menos que esteja desconfigurado ou vazio, caso em que será expandido paraval
.fonte