patch cria um novo arquivo e é por isso que ele possui credenciais de usuário eficazes.
Uma solução alternativa: use patch -o para criar um arquivo temporário e, em seguida, simplesmente cat tmp para o arquivo original.
Eu tenho um arquivo que pertence a um usuário não-root:
# ls -l example.php
-rw------- 1 foo bar ... example.php
Acabei de aplicar um patch com um comando como
patch -p0 <<-EOF
--- .../example.php.orig 2012-06-20 15:07:13.000000000 +0200
+++ .../example.php 2012-06-20 15:43:05.000000000 +0200
...
EOF
como root e o usuário e grupo do arquivo de destino foram alterados para root . Não encontrei nenhuma referência a isso nas páginas man .
Existe uma maneira de deixar a propriedade do arquivo como antes sem usar su , sudo ou chown ?
su parece incapaz de especificar um grupo. sudo -u foo patch ... é executado corretamente, mas define o grupo errado. sudo -u foo -g bar patch ... retorna Sorry, user root is not allowed to execute '/usr/bin/patch' as foo:bar on hostname . Isso pode acontecer porque o usuário foo não é membro do grupo bar . chown significaria ter que armazenar as permissões antes de executar patch , adicionando outras duas linhas de código.