Passando o valor da variável para o shell de outro usuário

0

Abaixo está um script simples a.sh

#name: a.sh
user=$(whoami)
sudo runuser -l test2 -c 'touch /home/test2/$user.file'

Estou tentando salvar o nome de usuário do usuário atual, que é test1 na variável user , e criar um arquivo no diretório /home/test2 como usuário test2 . Os scripts retornam sem erros, mas não fazem nenhum arquivo chamado test1.file in /home/test2 . Depois de dar uma olhada, descobri que existe um arquivo chamado .file in /home/test2 . Isso significa que, após acessar o ambiente shell de test2 , a variável $user não está sendo resolvida.

Como resolver isso?

    
por Fazle Rabbi 04.02.2018 / 12:29

1 resposta

3

A expansão de $user na linha de comando sudo está acontecendo logo antes do comando touch ser executado. No ambiente que está ativo naquele momento (que provavelmente foi limpo por sudo ), seu valor é indefinido e, portanto, se expande para a cadeia vazia. É aqui que você obtém o arquivo chamado .file de.

Para criar o arquivo com o nome adequado, use aspas duplas em torno do comando touch . Isso garantirá que $user seja expandido antes de sudo ser chamado:

sudo runuser -l test2 -c "touch /home/test2/$user.file"

Nota: não sei o que é runuser . Eu teria usado

sudo -u test2 touch "/home/test2/$user.file"
    
por 04.02.2018 / 12:36