usando sudo -u name para executar comandos dentro de scripts shell

2

Eu sou extremamente preguiçoso e prefiro escrever scripts para automatizar o software de compilação. Para mim, como esses scripts podem ficar bastante longos, é mais fácil executá-los como root, mas ter o software individual compilado como um usuário sem incremento (portanto, sudo -u). Eu fui capaz de fazer isso no passado, mas estou tendo um problema agora em que as condicionais não estão sendo avaliadas. Assim, algo como:

sudo -u name if [ ! -f $HOME/file ];then echo "file not found";fi

engasga comigo ... bem no then . Como posso consertar isso?

    
por Thomas Douglas 24.10.2015 / 14:52

2 respostas

1

Você pode fazer:

sudo -H -u name bash -c '[ -f "$HOME"/file ] || echo "file not found"'

[ -f "$HOME"/file ] || echo "file not found" faz exatamente o que você está tentando fazer com if..then .

De man sudo :

-H, --set-home

Request that the security policy set the HOME environment variable to the home directory specified by the target user's password database entry. Depending on the policy, this may be the default behavior.

    
por 24.10.2015 / 15:57
0

Seu shell atual vê o ponto-e-vírgula e termina o comando sudo ; assim, o sudo só vê if [ ! -f $HOME/file ] . Sugestões:

  1. Escape dos caracteres especiais ou
  2. cite todo o comando sudo (não testado) ou
  3. coloque os comandos em um script de shell (temporário, se desejado) e aponte sudo para ele.
por 24.10.2015 / 15:27