Cygwin bash sed bloqueia meus arquivos

12

Quando altero os arquivos no cygwin bash com o comando sed, o arquivo fica bloqueado.

Reproduzir:

  1. Abra cmd e cd no diretório não-usuário (por exemplo, temp )
  2. echo aaa > test.txt
  3. Abra em texteditor, adicione linha, tente salvar = > trabalha
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt "
  5. Em texteditor, adicione outra linha e tente salvar = > "Acesso negado"

WTF ?! Como posso sed um arquivo sem bloquear ou liberar as alças de arquivo depois?

  • As permissões de segurança do Windows parecem estar completamente corrompidas no arquivo:

    Permissões antes:

    Permissõesapós:

  • Funciona,noentanto,nodiretóriodousuário(Desktop)

  • EuverifiqueioarquivocomoLockHunter,masnenhumprocessoapareceparabloquearoarquivo
  • A FAQ do Cygwin menciona interferências em alguns programas. Ele tentou desinstalar o Antivir e o Catalyst e reinicializar.
  • Tentando UnxTools (travar), GnuWin32 (o sed não suporta substituição local), Interex (o instalador não suporta o W7 Pro ) ... * suspiro *
por Gerold Meisinger 20.02.2012 / 22:38

3 respostas

8

correspondendo à Lista de discussão do Cygwin , use noacl para a montagem

$ mount -o binary,posix=0,user,noacl C:/tmp /mnt/tmp

ou diretamente no Windows ../cygwin/fstab antes de iniciar o Cygwin bash

C:/tmp /mnt/tmp ntfs binary,posix=0,user,noacl 0 0
    
por 21.02.2012 / 14:10
4

Eu tive exatamente o mesmo problema depois de usar o find em combinação com grep e sed no cygwin para processar uma pasta cheia de arquivos de código-fonte Java automaticamente. Sed bagunçou as permissões de arquivo NTFS dos meus arquivos, que ainda eram persistentes depois de uma reinicialização, então eu procurei uma maneira fácil de corrigir isso.

Na verdade, encontrei uma maneira fácil de recuperar as permissões de arquivo para os valores antigos. Isso pode ser feito para uma pasta inteira recursivamente, o que é importante para mim, já que eu modifiquei muitos arquivos de uma vez (várias centenas). Infelizmente, eu só sei os nomes alemães para as entradas do menu, então não tenho certeza de como as entradas do menu (no Windows Explorer) são chamadas em inglês correto.

Em alemão, você faz: Clique com o botão direito 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 prompt do UAC), agora eu apenas marquei ambas as caixas de seleção (a superior já está definida, mas a inferior não, mas tem que ser). Agora clico em "OK" por três vezes.

A alteração real que é feita por isso é que a caixa de seleção inferior força o Windows a substituir as permissões atuais para o conteúdo da pasta de forma recursiva com as permissões da pasta que você clicou, então todas as permissões quebradas foram corrigidas. Funcionou como um charme para mim e também é muito rápido (apenas alguns segundos para muitos arquivos).

Possíveis traduções (adivinhadas por mim):

  • "Eigenschaften" - > "Propriedades"
  • "Sicherheit" - > "Segurança"
  • "Erweitert" - > "Avançado"
  • "Berechtigungen ändern ..." - > "Alterar permissões ..."
por 07.11.2012 / 20:00
2

Eu executei meu próprio conjunto de testes e, de fato, as permissões do arquivo foram configuradas para r-xr-x --- depois que o comando sed e os comandos subseqüentes do cygwin perceberão isso como um arquivo somente leitura.

C:\Temp>echo aaa > test.txt
C:\Temp>ls -l
total 1
----------+ 1 bikeguy ???????? 6 Feb 21 08:51 test.txt
C:\temp>sed -i 's/aaa/bbb/' test.txt
C:\temp>cat test.txt
bbb
C:\temp>ls -l test.txt
-r-xr-x---+ 1 bikeguy mkgroup-l-d 5 Feb 21 08:52 test.txt
C:\temp>

Estas permissões -r-xr-x --- impedem gravações subsequentes de algum software:

C:\temp>echo xxx > test.txt
Access is denied.
C:\temp>

Assim, a solução alternativa seria adicionar um chmod adicional ao arquivo

C:\temp>chmod 777 test.txt
C:\temp>echo xxx > test.txt
C:\temp>
    
por 20.02.2012 / 22:58