Когда я изменяю файлы в cygwin bash с помощью команды sed, файл блокируется.
Воспроизводить:
- Открыть
cmd
иcd
в непользовательский каталог (напримерtemp
) echo aaa > test.txt
- Откройте в texteditor, добавьте строку, попробуйте сохранить => работает
%CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
"- В texteditor добавьте еще одну строку и попытайтесь сохранить => "Доступ запрещен"
WTF ?! Как я могу сохранить файл без блокировки или впоследствии освободить его?
Разрешения безопасности Windows, похоже, полностью прикручены к файлу:
Разрешения до:
Разрешения после:
Однако работает в пользовательском каталоге (
Desktop
)- Я проверил файл с помощью LockHunter, но процесс блокировки файла не отображается
- Cygwin FAQ упоминает о помехах в некоторых программах. Он попытался удалить Antivir и Catalyst и перезагрузить компьютер.
- Попытка
UnxTools(вылетает),GnuWin32(sed не поддерживает подстановку на месте),Interex(инсталлятор не поддерживает W7 Pro) ... * вздох *
Ответы:
соответствующий списку рассылки Cygwin , используйте noacl для монтирования
или непосредственно в Windows
../cygwin/fstab
перед запуском Cygwin bashисточник
У меня была точно такая же проблема после использования find в сочетании с grep и sed в cygwin для автоматической обработки папки, полной файлов исходного кода Java. Сед испортил разрешения файлов NTFS для моих файлов, которые оставались постоянными после перезагрузки, поэтому я искал простой способ исправить это.
Я на самом деле нашел простой способ вернуть права доступа к файлам к старым значениям. Это можно сделать для всей папки рекурсивно, что важно для меня, поскольку я изменил сразу столько файлов (несколько сотен). К сожалению, я знаю только немецкие имена для пунктов меню, поэтому я не уверен, как пункты меню (в проводнике Windows) вызываются на правильном английском языке.
На немецком языке вы делаете: Щелкните правой кнопкой мыши на родительской папке папки, в которой я использовал sed, «Eigenschaften» (контекстное меню), «Sicherheit» (вкладка в диалоговом окне), «Erweitert» (кнопка), «Berechtigungen ändern ... "(кнопка с подсказкой UAC), теперь я просто проверяю оба флажка (верхний уже установлен, но нижний нет, но должен быть). Теперь я нажимаю «ОК» три раза.
Фактическое изменение, сделанное этим, заключается в том, что нижний флажок вынуждает Windows рекурсивно заменять текущие разрешения для содержимого папки на разрешения для папки, которую вы щелкнули правой кнопкой мыши, поэтому все сломанные разрешения будут исправлены. Работал для меня как шарм, а также очень быстро (всего несколько секунд для большого количества файлов).
Возможные переводы (угадал я):
источник
Я запустил свой собственный набор тестов, и, действительно, права доступа к файлу установлены в r-xr-x --- после того, как команда sed и последующие команды cygwin воспримут это как файл только для чтения.
Эти разрешения -r-xr-x --- предотвращают последующую запись некоторыми программами:
Таким образом, обходной путь должен был бы добавить дополнительный chmod в файл
источник
chmod 777 test.txt
команду, чтобы обойти эту проблему.