Como parte de um procedimento de instalação de um software, eu uso:
curl -s <url-to-targz> | tar -p -x -z -C /
dentro de um script Perl (eu uso qx($command)
ou system($command)
, ou vou fazer.Tudo vai bem, e a bola tar é instalada no / do meu sistema, mas quando eu faço a mesma coisa em um compartilhamento nfs :
curl -s <url-to-targz> | tar -p -x -z -C /my-nfs/opt
Em seguida, ocorre o seguinte:
qx($command)
ou system($command)
me deixa com a situação em que as permissões são alteradas (por exemplo, o que era executável, não é mais executável). Eu estou suspeitando que isso tem a ver com umask (que é 022 no meu sistema), e normalmente o sinalizador -p deve cuidar disso, mas ainda não há alegria neste caso. Alguém tem alguma sugestão para mim (além de ler a manpage: -))?
Eu também tentei algo como system("umask xyz; $command")
, mas (provavelmente porque o $command
está usando um fork do meu processo, que recebe umask 022
): também não há alegria.
Edit: Algumas das respostas indicam que eu deveria usar umask de Perl. Eu acho que uma umask 000 vai fazer o truque (mas eu vou ver isso de manhã, quando eu estou no sistema. Umask, porém, tem um efeito diferente em arquivos e diretórios. Existe uma maneira de desativar umask inteiramente durante a execução de meu progran (apesar de mil razões de segurança contra isso).