1. Obtendo um shell com o novo grupo sem sair e entrar novamente
Se você só adicionar um grupo, usei o seguinte:
exec sg <new group name> newgrp 'id -gn'
Esta é uma variação do truque newgrp de duas camadas do Legooolas, mas está em uma linha e não requer que você insira manualmente seu grupo primário.
sg
é newgrp mas aceita um comando para executar com o novo ID de grupo. O exec
significa que o novo shell substitui o shell existente, portanto, você não precisa "efetuar logout" duas vezes.
Ao contrário do uso do su, você não precisa digitar sua senha. Ele também não atualiza seu ambiente (além de adicionar o grupo), então você mantém seu diretório de trabalho atual, etc.
2. Executando o comando em todas as janelas de tela em uma sessão
O comando at
na Tela executa um comando nas janelas especificadas (note que este é um comando Screen, não um comando shell).
Você pode usar o seguinte comando para enviar o comando para todas as sessões de tela existentes:
screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \'id -gn\'^M"
Observe a necessidade de escapar dos backticks para executar id
na sessão Screen, e o ^ M para fazer com que o Screen pressione 'enter' no final do seu comando.
Note também que o comando stuff
da tela simplesmente digita o texto de comando no seu lado. Portanto, algo estranho pode acontecer se uma das janelas de tela tiver um comando parcialmente escrito em um prompt de comando ou estiver executando um aplicativo diferente de um shell (por exemplo, emacs, top). Se isso é um problema, tenho algumas ideias:
- Para se livrar de qualquer comando parcialmente escrito, você pode adicionar "^ C" ao início do comando.
- Para evitar a execução do comando em uma janela do emacs, etc, você poderia pedir 'at' para filtrar o título da janela etc (no exemplo acima, eu uso "#", que corresponde a todas as janelas, mas você pode filtrar por janela título, usuário, etc).
Para executar o comando em uma janela específica (identificada pelo número da janela), use o seguinte:
screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \'id -gn\'^M"