Problema ao executar o comando “newgrp” no script

7

Eu quero alterar o grupo de trabalho no meu script. Então eu escrevi uma linha newgrp test_grp1 no meu script. Mas meu script é encerrado automaticamente depois de executar esta linha. Existe alguma solução para superar este problema?

#/bin/ksh
...
newgrp test_grp1
...

Nota: estou usando o Unix AIX OS.

    
por chanchal1987 17.08.2011 / 12:20

2 respostas

7

newgrp inicia um subshell com o grupo especificado. Assim, essa linha no seu script não terminará até que a subcamada esteja concluída.

A manipulação de newgrp também é diferente se você estiver usando bash ou ksh . ksh implementa como um comando interno equivalente a exec /usr/bin/newgrp [group] . Então, como exec , newgrp nunca retorna. (Veja alguma documentação aqui .

Se você quiser que ele retorne e queira executar comandos nesse subshell com identidade de grupo alterada, você poderá usar o redirecionamento.

Por exemplo:

#!/bin/ksh

echo "Before newgrp"
/usr/bin/newgrp users <<EONG
echo "hello from within newgrp"
id
EONG
echo "After newgrp"

Aviso: /usr/bin/newgrp é chamado explicitamente para evitar o implícito exec de ksh . O último comando nesse script será executado dentro do shell original, com a identidade do grupo original.

    
por 17.08.2011 / 13:29
1

Depois que um processo é iniciado, ele não pode obter privilégios extras. Portanto, você não pode obter uma associação de grupo no meio de um script. Você pode executar o script inteiro com a associação de grupo extra:

newgrp test_grp1
/path/to/script

Você não pode alterar seu script do GID no meio real. Se você realmente precisa disso, mude para um idioma onde você possa, como Perl. É raro precisar mudar seu verdadeiro GID, já que não importa muito. Geralmente, basta fazer uma chamada ocasional para chgrp (criar arquivos sem permissões de grupo primeiro, executar chgrp e adicionar permissões de grupo; se você criar arquivos com permissões de grupo, haverá uma condição de corrida: um usuário que esteja em o primeiro grupo pode abrir o arquivo antes que você tenha tempo de executar chgrp ).

    
por 17.08.2011 / 13:26