Eu quero executar um comando como um usuário diferente (o usuário atual é root). Assim, eu faço
su newuser -c 'mkdir "/tmp/test"'
mas eu tenho um problema em passar argumentos para ele
i="name"
su newuser -c 'mkdir "/tmp/$i"'
ou em um roteiro
su newuser -c 'mkdir "/tmp/$1"'
A razão para o comportamento é que dentro de aspas simples, a expansão de variável está desabilitada. Entre aspas duplas está habilitado. Veja, por exemplo , este Q&A para mais informações.
Então, você pode tentar alterar sua
su
chamada da seguinte forma:Como o argumento para
su
agora está entre aspas duplas, o$i
será expandido porque as aspas simples são (para o shell de interpretação que passará o resultado final parasu
) simplesmente "texto" e não mais especiais.