Cygwin bash sed блокирует мои файлы

когда я изменяю файлы в cygwin bash с помощью команды sed, файл блокируется.

воспроизведение:

  1. открыть cmd и cd до не-пользователей каталога (Ф.е. temp)
  2. echo aaa > test.txt
  3. открыть в texteditor, добавить строку, попытаться сохранить => работает
  4. %CYGWIN_HOME%binbash -c "sed -i 's/aaa/bbb/' test.txt"
  5. в texteditor, добавьте еще одну строку и попробуйте сохранить = > "Access denied"

WTF?! Как я могу sed файл без блокировка или освобождение дескрипторов файлов после этого?

  • разрешения безопасности Windows, по-видимому, полностью ввернуты в файл:

    разрешения:

    permissions before (Image!)

    разрешения после:

    permissions after (Image!)

  • он работает, однако, в каталоге пользователя (Desktop)

  • Я проверил файл с LockHunter но процесс не появляется чтобы заблокировать файл
  • в Cygwin часто задаваемые вопросы упоминает помехи в некоторых программах. Он попытался удалить Antivir и Catalyst и перезагрузки.
  • попытка UnxTools (аварии), GnuWin32 (sed не поддерживает замену на месте), Interex (программа установки не поддерживает W7 Pro)... * вздох *
23
задан Donald Duck
23.02.2023 21:27 Количество просмотров материала 2639
Распечатать страницу

3 ответа

соответствующую Cygwin Mailinglist используйте noacl для установки

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

или непосредственно в Windows ../cygwin/fstab перед началом Cygwin bash

C:/tmp /mnt/tmp ntfs binary,posix=0,user,noacl 0 0
8
отвечен Gerold Meisinger 2023-02-25 05:15

У меня была точно такая же проблема после использования find в сочетании с grep и sed под cygwin для автоматической обработки папки, полной файлов исходного кода Java. Sed испортил разрешения NTFS-файлов моих файлов, которые все еще были постоянными после перезагрузки, поэтому я искал простой способ исправить это.

Я нашел простой способ вернуть права доступа к старым значениям. Это можно сделать для целой папки рекурсивно, что для меня важно, так как у меня есть модифицировано сразу столько файлов (несколько сотен). К сожалению, я знаю только немецкие имена для пунктов меню, поэтому я не уверен, как пункты меню (в Проводнике Windows) называются на правильном английском языке.

в Германии, нужно сделать так: щелкните правой кнопкой мыши на родительской папки, где я использовал СЭД "Eigenschaften" (контекстное меню), "Sicherheit" (вкладка в диалоговом окне), "Erweitert" (кнопка), "Berechtigungen ändern..."(кнопка с приглашением UAC), теперь я просто проверяю оба флажка (верхний установлен уже есть, но Нижнего нет, но должно быть). Теперь я нажимаю на " OK " три раза.

фактическое изменение, которое делается этим является то, что Нижний флажок заставляет Windows, чтобы заменить текущие разрешения для содержимого папки рекурсивно с разрешениями папки, которую вы rightclicked, так что все сломанные разрешения фиксированы. Работал как шарм для меня, а также очень быстро (всего несколько секунд для большого количества файлов).

возможные переводы me):

  • "Eigenschaften" - > "Properties"
  • "Sicherheit" -> "Безопасность"
  • "Erweitert" - > "Advanced"
  • "Berechtigungen ändern..."-> "Изменить разрешения..."
4
отвечен Rolf Viehmann 2023-02-25 07:32

я запустил свой собственный набор тестов, и, действительно, права доступа к файлу действительно получают значение r-xr-x--- после того, как команда sed и последующие команды cygwin будут воспринимать это как файл только для чтения.

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>

эти-r-xr-x--- разрешения предотвращают последующие записи некоторыми программами:

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

Итак, обходным путем было бы добавить дополнительный chmod в файл

C:\temp>chmod 777 test.txt
C:\temp>echo xxx > test.txt
C:\temp>
2
отвечен Stephen Quan 2023-02-25 09:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх