Sudo dentro de loop?

2

Em um shell bash padrão, eu estava tentando catar um arquivo dos diretórios home de vários usuários que estão em uma montagem NFS raiz-esmagada, então eu não poderia simplesmente lê-los como root:

sudo -u userA cat ~userA/blah

.. funciona bem. No entanto, tentar isso em um loop não funciona:

for x in userA userB userC; do sudo -u $x cat ~$x/blah; done

.. não funciona :

cat: ~userA/blah: Permission denied
cat: ~userB/blah: Permission denied
cat: ~userC/blah: Permission denied

Agora existem outras maneiras de alcançar o resultado desejado, mas o que eu estou tentando entender é porque o loop for não funciona

    
por Gaspode 22.08.2016 / 18:09

1 resposta

1

Acho que esta parte provavelmente não está funcionando devido à ordem de operações . A expansão de til ocorre antes da expansão do parâmetro, portanto, na verdade, você está tentando encontrar um arquivo chamado literalmente, por exemplo, ~userA/blah , e não um arquivo chamado blah no diretório inicial do usuário.

Você poderia invocar outro shell para obter a próxima rodada de expansão, como

sudo -u "$x" sh -c "cat ~/blah"

e não é necessário especificar o nome de usuário no caminho, pois você já será o usuário e ~ deve ser o diretório inicial

    
por 22.08.2016 / 18:39

Tags