Obtém a home do usuário ao sudo-ing em um script executado pelo root

2

Na manpage do sudo, encontrei a opção -H , mas não consigo entender como ela funciona. A manpage diz:

The -H ( HOME ) option sets the HOME environment variable to the homedir of the target user (root by default) as specified in passwd(5).

No meu entender, o seguinte não deve acontecer:

root $ sudo -u sztomi -H echo $HOME
/root

Mas, em vez disso, deve sair /home/sztomi , que é o diretório home do usuário sztomi.

Como posso fazer isso direito?

    
por Tamás Szelei 20.10.2011 / 11:48

2 respostas

4

Você não citou $HOME , então o valor atual está sendo substituído anterior à execução do comando sudo . Coloque entre aspas simples (') .

EDITAR:

Como notamos (veja comentários), o sudo não chama um subshell para iniciar o comando dado (portanto, não há shell expandindo $HOME ). O comando revisado seria:

 sudo -u sztomi -H bash -c 'echo $HOME'

Explicado: sudo comuta o ID do usuário e chama um bash shell que, por sua vez, recebe o echo $HOME , substitui a variável HOME pelo seu valor e finalmente executa o comando echo .

Note que chamar o subshell só é necessário neste exemplo para obter a variável HOME substituída após o sudo trocar o ID do usuário. Não é necessário se você deseja apenas iniciar um único programa sem substituição de variável no ambiente de destino.

    
por 20.10.2011 / 12:15
0

Você deve ser capaz de usar o ~ sztomi para obter a variável de ambiente.

Por exemplo, isso listará o conteúdo para o diretório inicial do sztomi.

sudo -u sztomi ls ~sztomi
    
por 20.10.2011 / 12:22