Não há como fazer isso enquanto eu conheço, um script simples pode ser a melhor solução.
if [ -e /tmp/foo.log ]; then
foo >> /tmp/foo.log
else
foo >> /tmp/foo.log
chmod 0644 /tmp/foo.log
fi
Esta é provavelmente uma duplicata, mas todas as minhas pesquisas estão levantando questões sobre permissão de erros negados.
Estou executando um comando em um shell bash. Eu quero redirecionar a saída para acrescentar a um arquivo que provavelmente não existe na primeira execução. Eu quero definir o modo de permissões de arquivo específico se o redirecionamento de saída tiver que criar esse arquivo. Existe uma maneira de fazer isso com um comando?
Por exemplo, posso tentar
foo >> /tmp/foo.log 0644
em que 0644
são as permissões com as quais quero que foo.log
acabem. A maioria dos comandos que experimentei no bash acabam interpretando 0644
como um argumento adicional para foo
.
Tenho a sensação de que isso vai exigir um segundo comando para chmod
das permissões antes ou depois de escrever para ele.
Estou usando o GNU bash 4.2.25 e o Ubuntu 12.04, se isso faz diferença - as respostas gerais são preferidas.
Eu sei que é uma pergunta antiga, mas queria adicionar meus dois centavos.
Eu tive a mesma ideia e criei uma solução semelhante a BowlesCR .
O problema com sua solução foi que meu comando ( foo
) não funcionaria se eu mudasse o umask antes de executá-lo, então essa é minha opinião sobre o problema:
foo | ( umask 0033; cat >> /tmp/foo.log; )
Aqui, umask
afeta somente o redirecionamento para foo.log
na subshell. Todo o resto não é afetado.
Um pouco confuso, mas funciona.
Sem scripts verdadeiros, você pode encadear um pouco:
touch foo.log; chmod 0644 foo.log; foo >> foo.log
Efetivamente semelhante à resposta de Slowki, mas condensada em uma única linha.
A única outra coisa em que consigo pensar é mexer no umask. Melhor fazer isso em um subshell para não poluir o ambiente atual:
(umask 0033 && foo >> foo.log)
Dois problemas com isso.
creat()
syscall (0644 parece ser o que o Bash usa). >>
append).