Provavelmente é uma duplicata, mas todas as minhas pesquisas estão levantando perguntas sobre erros de permissão negada.
Estou executando um comando em um shell bash. Quero redirecionar a saída para anexar 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 precisar criar esse arquivo. Existe uma maneira de fazer isso com um comando?
Por exemplo, eu posso tentar
foo >> /tmp/foo.log 0644
onde 0644
estão as permissões que eu quero foo.log
terminar. 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 levar um segundo comando para chmod
as permissões antes ou depois de gravá-lo.
Estou usando o GNU bash 4.2.25 e o Ubuntu 12.04, se isso faz diferença - respostas gerais são preferidas.
fonte
umask
respostas são melhores e uma delas deve ser aceita.Eu sei que é uma pergunta antiga, mas eu queria adicionar meus dois centavos.
Eu tive a mesma idéia e surgiu uma solução semelhante ao BowlesCR . O problema com a solução dele era que meu command (
foo
) não funcionaria se eu alterasse o umask antes de executá-lo, então esta é a minha opinião sobre o problema:Aqui,
umask
afeta apenas o redirecionamento parafoo.log
no subshell. Tudo o resto permanece inalterado.Um pouco complicado, mas funciona.
fonte
Sem scripts verdadeiros, você pode encadear um pouco:
Efetivamente semelhante à resposta de Slowki , mas condensado em uma linha.
A única outra coisa que consigo pensar é mexer com o umask. É melhor fazer isso em um subshell para não poluir o ambiente atual:
Dois problemas com isso, no entanto.
creat()
syscall (0666 parece ser o que o Bash usa).umask
se aplica apenas à criação do arquivo ).fonte
cat
. (Embora isso não siga o padrão de usos inúteis decat
.) (2) Presumo que você quis dizer que o bash usa como padrão o modo 0666 ao criar arquivos e, por isso, editei sua resposta para dizer isso. (Veja isso , isso ... (continua)umask
valor de 22, 23 ou 32 também funcionaria nesse contexto (você não precisa usar zero (s) à esquerda; quando modos eumask
valores são especificados numericamente, eles sempre são interpretados como octais).22
é mais comumente usado convencionalmente.Quando o redirecionamento define as permissões erradas, por exemplo:
Eu acredito que você pode usar algo como o xynomorf forneceu e abordar a preocupação stderr da Orsiris de Jong com uma pequena modificação para usar a substituição do processo do bash .
Naturalmente, use
umask 0077
para obter o modo600
e proibir que outros usuários vejam o conteúdo.fonte
Se você deseja redirecionar para um script, ao contrário
umask
, com substituição de processo einstall
também pode definir o bit de execução:<()
coloca a saída em um arquivo temporário, consulte Substituição de Processofonte