Wenn ich Dateien in Cygwin Bash mit dem Befehl sed ändere, wird die Datei gesperrt.
Reproduzieren:
- Öffnen
cmd
undcd
zu nicht-Benutzerverzeichnis (fetemp
) echo aaa > test.txt
- Öffne im Texteditor, füge eine Zeile hinzu, versuche zu speichern => funktioniert
%CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
"- Fügen Sie im Texteditor eine weitere Zeile hinzu und versuchen Sie zu speichern => "Zugriff verweigert"
WTF ?! Wie kann ich eine Datei ohne Sperren sedieren oder die Dateizugriffsnummern danach freigeben?
Windows-Sicherheitsberechtigungen scheinen vollständig in die Datei eingebunden zu sein:
Berechtigungen vor:
Berechtigungen nach:
Es funktioniert jedoch im Benutzerverzeichnis (
Desktop
)- Ich habe die Datei mit LockHunter überprüft, aber es wird kein Prozess zum Sperren der Datei angezeigt
- In den häufig gestellten Fragen zu Cygwin werden Störungen bei einigen Programmen erwähnt. Es wurde versucht, Antivir und Catalyst zu deinstallieren und neu zu starten.
- Versuche
UnxTools(Abstürze),GnuWin32(sed unterstützt keine Inplace-Substitution),Interex(Installer unterstützt W7 Pro nicht) ... * seufz *
Antworten:
entsprechend Cygwin Mailinglist verwenden Sie noacl zum Mounten
oder direkt in Windows,
../cygwin/fstab
bevor Sie Cygwin bash startenquelle
Ich hatte genau die gleichen Probleme, nachdem ich find in Kombination mit grep und sed unter cygwin verwendet hatte, um einen Ordner voll mit Java-Quellcodedateien automatisch zu verarbeiten. Sed hat die NTFS-Dateiberechtigungen meiner Dateien, die nach einem Neustart noch vorhanden waren, durcheinander gebracht, und ich habe nach einer einfachen Möglichkeit gesucht, dies zu beheben.
Ich habe tatsächlich eine einfache Möglichkeit gefunden, die Dateiberechtigungen auf die alten Werte zurückzusetzen. Es kann für einen ganzen Ordner rekursiv durchgeführt werden, was für mich wichtig ist, da ich so viele Dateien auf einmal geändert habe (mehrere hundert). Leider kenne ich nur die deutschen Namen für die Menüeinträge, daher bin ich mir nicht sicher, wie die Menüeinträge (im Windows Explorer) in korrektem Englisch heißen.
In deutscher Sprache machen Sie Folgendes: Klicken Sie mit der rechten Maustaste auf den übergeordneten Ordner des Ordners, in dem ich sed verwendet habe, auf "Eigenschaften" (Kontextmenü), "Sicherheit" (Registerkarte im Dialogfeld), "Erweitert" (Schaltfläche), "Berechtigungen ändern ...". "(Schaltfläche mit UAC - Eingabeaufforderung), jetzt überprüfe ich nur beide Kontrollkästchen (das obere ist bereits gesetzt, das untere ist nicht gesetzt, muss es aber sein). Nun klicke ich dreimal auf "OK".
Die tatsächliche Änderung, die hierdurch vorgenommen wird, besteht darin, dass das untere Kontrollkästchen Windows zwingt, die aktuellen Berechtigungen für den Ordnerinhalt rekursiv durch die Berechtigungen des Ordners zu ersetzen, auf den Sie mit der rechten Maustaste geklickt haben, sodass alle fehlerhaften Berechtigungen behoben werden. Arbeitete wie ein Zauber für mich und ist auch sehr schnell (nur ein paar Sekunden für viele Dateien).
Mögliche Übersetzungen (von mir erraten):
quelle
Ich habe meine eigenen Tests durchgeführt, und in der Tat werden die Berechtigungen der Datei auf r-xr-x gesetzt - nachdem der sed-Befehl und nachfolgende cygwin-Befehle dies als schreibgeschützte Datei wahrgenommen haben.
Diese -r-xr-x --- -Berechtigungen verhindern nachfolgende Schreibvorgänge durch einige Software:
Die Problemumgehung wäre also, der Datei ein zusätzliches chmod hinzuzufügen
quelle
chmod 777 test.txt
Befehl, um dieses Problem zu umgehen.