Acho que o melhor que você pode fazer é executar os comandos que precisa executar usando sg
.
DESCRIPTION
The sg command works similar to newgrp but accepts a command. The
command will be executed with the /bin/sh shell. With most shells you
may run sg from, you need to enclose multi-word commands in quotes.
Another difference between newgrp and sg is that some shells treat
newgrp specially, replacing themselves with a new instance of a shell
that newgrp creates. This doesn't happen with sg, so upon exit from a
sg command you are returned to your previous group ID.
Assim, depois de criar o grupo e adicionar-se a ele, você poderá executar comandos como membro desse grupo com sg groupname command
. Então, por exemplo, isso funcionará:
sudo groupadd --system webapps
sudo useradd --system --gid webapps --home /home/lucio/server/webapps/hello_django hello
sudo chown -R hello:webapps .
sudo chmod -R g+w .
sudo usermod -a -G webapps $(whoami)
## From now on, run all commands through sg
sg webapps "mkdir foorbar"
Como isso seria difícil de escrever, eu colocaria em uma função:
run_as_webapps() sg webapps "$@"
Em seguida, chame os comandos que você precisa chamar usando essa função
run_as_webapps mkdir foobar
E no final do dia, porém, pode ser mais fácil simplesmente executar o script inteiro como root. Ou isso ou tem dois scripts, um para configurar os grupos e outro para fazer todo o resto. Basta sair e fazer login novamente antes de executar o segundo.
A especificação POSIX afirma claramente que as funções devem ser definidas desta forma:
foo () command
Por razões que eu não entendo, o OP teve problemas com isso e teve que usar
function run_as_webapps(){
sg webapps "$@"
}