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.