Quando altero os arquivos no cygwin bash com o comando sed, o arquivo é bloqueado.
Reproduzir:
- Abrir
cmd
ecd
para o diretório não-usuário (fetemp
) echo aaa > test.txt
- Abra no editor de texto, adicione linha, tente salvar => funciona
%CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
"- No editor de texto, adicione outra linha e tente salvar => "Acesso negado"
WTF ?! Como sedar um arquivo sem travar ou liberar as alças de arquivo depois?
As permissões de segurança do Windows parecem estar completamente danificadas no arquivo:
Permissões antes:
Permissões após:
No entanto, funciona no diretório do usuário (
Desktop
)- Eu verifiquei o arquivo com o LockHunter, mas nenhum processo aparece para bloquear o arquivo
- O FAQ do Cygwin menciona interferências em alguns programas. Tentou desinstalar o Antivir e o Catalyst e reiniciar.
- Tentando
UnxTools(falhas),GnuWin32(sed não suporta substituição no local),Interex(o instalador não suporta W7 Pro) ... * suspiro *
Respostas:
correspondente ao Cygwin Mailinglist , use noacl para montar
ou diretamente no Windows
../cygwin/fstab
antes de iniciar o Cygwin bashfonte
Eu tive exatamente o mesmo problema depois de usar o find em combinação com grep e sed sob cygwin para processar uma pasta cheia de arquivos de código-fonte Java automaticamente. Sed atrapalhou as permissões de arquivos NTFS dos meus arquivos, que ainda eram persistentes após a reinicialização, então procurei uma maneira fácil de corrigir isso.
Na verdade, encontrei uma maneira fácil de obter as permissões de arquivo de volta aos valores antigos. Isso pode ser feito para uma pasta inteira recursivamente, o que é importante para mim, pois modifiquei muitos arquivos de uma só vez (várias centenas). Infelizmente, eu sei apenas os nomes em alemão para as entradas do menu, então não tenho certeza de como as entradas do menu (no Windows Explorer) são chamadas no inglês correto.
Em alemão, você faz: Clique com o botão direito do mouse na pasta pai da pasta em que usei sed, "Eigenschaften" (menu de contexto), "Sicherheit" (guia na caixa de diálogo), "Erweitert" (botão), "Berechtigungen ändern ... "(botão com o prompt do UAC), agora apenas marquei as duas caixas de seleção (a superior já está definida, mas a inferior não, mas precisa ser). Agora clico em "OK" por três vezes.
A alteração real feita com isso é que a caixa de seleção inferior força o Windows a substituir recursivamente as permissões atuais para o conteúdo da pasta pelas permissões da pasta que você clicou com o botão direito, para que todas as permissões quebradas sejam corrigidas. Funcionou como um encanto para mim e também é realmente rápido (apenas alguns segundos para muitos arquivos).
Traduções possíveis (adivinhadas por mim):
fonte
Eu executei meu próprio conjunto de testes e, de fato, as permissões do arquivo são definidas como r-xr-x --- após o comando sed e os comandos cygwin subsequentes perceberem isso como um arquivo somente leitura.
Essas permissões -r-xr-x --- impedem gravações subsequentes de alguns softwares:
Portanto, a solução alternativa seria adicionar um chmod adicional no arquivo
fonte
chmod 777 test.txt
comando para solucionar esse problema.