Cuando cambio archivos en cygwin bash con el comando sed, el archivo se bloquea.
Reproducir:
- Abierto
cmd
ycd
al directorio de no usuarios (fetemp
) echo aaa > test.txt
- Abrir en el editor de texto, agregar línea, intentar guardar => funciona
%CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
"- En el editor de texto, agregue otra línea e intente guardar => "Acceso denegado"
WTF ?! ¿Cómo puedo depositar un archivo sin bloquearlo o liberar los identificadores de archivo después?
Los permisos de seguridad de Windows parecen estar completamente atornillados en el archivo:
Permisos antes:
Permisos después de:
Sin embargo, funciona en el directorio de usuarios (
Desktop
)- Verifiqué el archivo con LockHunter pero ningún proceso parece bloquear el archivo
- Preguntas frecuentes de Cygwin menciona interferencias con algunos programas. Intentó desinstalar Antivir y Catalyst y reiniciar.
- Probar
UnxTools(se bloquea),GnuWin32(sed no admite la sustitución in situ),Interex(el instalador no admite W7 Pro) ... * suspiro *
Respuestas:
correspondiente a la lista de correo de Cygwin , use noacl para el montaje
o directamente en Windows
../cygwin/fstab
antes de iniciar Cygwin bashfuente
Tuve exactamente el mismo problema después de usar find en combinación con grep y sed bajo cygwin para procesar automáticamente una carpeta llena de archivos de código fuente Java. Sed estropeó los permisos de mis archivos NTFS, que aún persistían después de un reinicio, así que busqué una manera fácil de solucionarlo.
En realidad, encontré una manera fácil de recuperar los permisos del archivo a los valores anteriores. Se puede hacer para una carpeta completa de forma recursiva, lo cual es importante para mí, ya que he modificado tantos archivos a la vez (varios cientos). Lamentablemente, solo sé los nombres alemanes para las entradas del menú, por lo que no estoy seguro de cómo se llaman las entradas del menú (en el Explorador de Windows) en inglés correcto.
En alemán, sí: haz clic derecho en la carpeta principal de la carpeta donde utilicé sed, "Eigenschaften" (menú contextual), "Sicherheit" (pestaña en el diálogo), "Erweitert" (botón), "Berechtigungen ändern ... "(botón con indicador UAC), ahora solo marco ambas casillas de verificación (la superior ya está configurada, pero la inferior no, pero tiene que estar). Ahora hago clic en "Aceptar" tres veces.
El cambio real que se realiza es que la casilla de verificación inferior obliga a Windows a reemplazar los permisos actuales para el contenido de la carpeta de forma recursiva con los permisos de la carpeta que hizo clic con el botón derecho, por lo que se corrigen todos los permisos rotos. Funcionó como un encanto para mí, y también es muy rápido (solo unos segundos para muchos archivos).
Posibles traducciones (adivinadas por mí):
fuente
Ejecuté mi propio conjunto de pruebas y, de hecho, los permisos del archivo se establecen en r-xr-x --- después del comando sed y los comandos cygwin posteriores lo percibirán como un archivo de solo lectura.
Estos permisos -r-xr-x --- impiden las escrituras posteriores de algunos programas:
Entonces, la solución sería agregar un chmod adicional en el archivo
fuente
chmod 777 test.txt
comando para solucionar este problema.