Kiedy zmieniam pliki w cygwin bash za pomocą polecenia sed, plik zostaje zablokowany.
Rozmnażać się:
- Otwarty
cmd
icd
do katalogu non-user (fetemp
) echo aaa > test.txt
- Otwórz w edytorze tekstu, dodaj linię, spróbuj zapisać => działa
%CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
„- W edytorze tekstu dodaj kolejny wiersz i spróbuj zapisać => „Odmowa dostępu”
WTF ?! Jak mogę uspokoić plik bez blokowania lub zwolnić uchwyty pliku?
Wygląda na to, że uprawnienia zabezpieczeń systemu Windows są całkowicie przykręcone do pliku:
Uprawnienia przed:
Uprawnienia po:
Działa jednak w katalogu użytkownika (
Desktop
)- Sprawdziłem plik za pomocą LockHunter, ale nie pojawił się żaden proces, aby zablokować plik
- Cygwin FAQ wspomina o zakłóceniach w niektórych programach. Próbował odinstalować Antivir i Catalyst i zrestartować komputer.
- Próbowanie
UnxTools(awarie),GnuWin32(sed nie obsługuje zastępowania w miejscu),Interex(instalator nie obsługuje W7 Pro) ... * westchnienie *
Odpowiedzi:
odpowiadający Cygwin Mailinglist , użyj noacl do montowania
lub bezpośrednio w systemie Windows
../cygwin/fstab
przed uruchomieniem bash Cygwinźródło
Miałem dokładnie taki sam problem po użyciu polecenia find w połączeniu z grep i sed pod cygwin do automatycznego przetwarzania folderu pełnego plików kodu źródłowego Java. Sed pomieszał uprawnienia do plików NTFS moich plików, które nadal były trwałe po ponownym uruchomieniu, więc szukałem łatwego sposobu, aby to naprawić.
Znalazłem prosty sposób na przywrócenie uprawnień do plików do starych wartości. Można to zrobić rekurencyjnie dla całego folderu, co jest dla mnie ważne, ponieważ zmodyfikowałem tak wiele plików jednocześnie (kilkaset). Niestety, znam tylko niemieckie nazwy pozycji menu, więc nie jestem pewien, jak pozycje menu (w Eksploratorze Windows) są wywoływane we właściwym języku angielskim.
W języku niemieckim robisz: Kliknij prawym przyciskiem myszy folder nadrzędny folderu, w którym użyłem sed, „Eigenschaften” (menu kontekstowe), „Sicherheit” (karta w oknie dialogowym), „Erweitert” (przycisk), „Berechtigungen ändern ... „(przycisk z pytaniem UAC), teraz po prostu zaznaczam oba pola wyboru (górne jest już ustawione, ale dolne nie, ale musi być). Teraz trzy razy klikam „OK”.
Rzeczywista zmiana, która jest przez to wykonana, polega na tym, że dolne pole wyboru zmusza system Windows do zastąpienia bieżących uprawnień dla zawartości folderu rekurencyjnie uprawnieniami do folderu, który kliknąłeś prawym przyciskiem myszy, więc wszystkie złamane uprawnienia są naprawione. Dla mnie działało to jak urok, a także jest bardzo szybkie (tylko kilka sekund dla wielu plików).
Możliwe tłumaczenia (zgadnięte przeze mnie):
źródło
Uruchomiłem własny zestaw testów i rzeczywiście uprawnienia pliku ustawiają się na r-xr-x --- po poleceniu sed i kolejnych poleceniach cygwin będzie to traktować jako plik tylko do odczytu.
Te uprawnienia -r-xr-x --- zapobiegają kolejnym zapisom niektórych programów:
Zatem obejściem byłoby dodanie do pliku dodatkowego chmod
źródło
chmod 777 test.txt
polecenia, aby obejść ten problem.