Abaixo está um script simplesa.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 está test1
na variável user
e criar um arquivo no /home/test2
diretório como user test2
. Os scripts retornam sem erro, mas não fazem nenhum arquivo nomeado test1.file
em /home/test2
. Depois de dar uma olhada , descobri que há um arquivo chamado .file
. /home/test2
Isso significa que, depois de ir para test2
o ambiente de shell do, a $user
variável não está sendo resolvida.
Como resolver isso?
A expansão
$user
nasudo
linha de comando está acontecendo logo antes datouch
execução do comando. No ambiente que está ativo naquele momento (que provavelmente foi limpo porsudo
), seu valor é indefinido e, portanto, expande para a string vazia. É aqui que você obtém o arquivo chamado.file
.Para criar o arquivo com o nome adequado, use aspas duplas ao redor do
touch
comando. Isso garantirá que$user
seja expandido antessudo
de ser invocado:Obs: não sei o que
runuser
é. eu teria usado