Dies ist wahrscheinlich ein Duplikat, aber alle meine Suchanfragen stellen Fragen zu Fehlern, denen die Berechtigung verweigert wurde.
Ich führe einen Befehl in einer Bash-Shell aus. Ich möchte die Ausgabe umleiten, um sie an eine Datei anzuhängen, die beim ersten Durchlauf wahrscheinlich nicht vorhanden ist. Ich möchte einen bestimmten Dateiberechtigungsmodus festlegen, wenn die Ausgabeumleitung diese Datei erstellen muss. Gibt es eine Möglichkeit, dies mit einem Befehl zu tun?
Zum Beispiel könnte ich es versuchen
foo >> /tmp/foo.log 0644
Wo 0644
sind die Berechtigungen, mit denen ich foo.log
enden möchte ? Die meisten Befehle, mit denen ich in Bash experimentiert habe, werden 0644
als zusätzliches Argument interpretiert foo
.
Ich habe das Gefühl, dass dies einen zweiten Befehl für chmod
die Berechtigungen vor oder nach dem Schreiben erfordert.
Ich verwende GNU bash 4.2.25 und Ubuntu 12.04, wenn das einen Unterschied macht - allgemeine Antworten werden bevorzugt.
quelle
umask
Antworten sind besser und eine davon sollte akzeptiert werden.Ich weiß, dass es eine alte Frage ist, aber ich wollte meine zwei Cent hinzufügen.
Ich hatte die gleiche Idee und kam auf eine ähnliche Lösung wie BowlesCR . Das Problem mit seiner Lösung war, dass mein Befehl (
foo
) nicht funktionieren würde, wenn ich die Umask vor dem Ausführen ändern würde. Dies ist also meine Einstellung zum Problem:Hier
umask
wirkt sich nur die Umleitung auffoo.log
in der Subshell aus. Alles andere bleibt unberührt.Ein bisschen verworren, aber es funktioniert.
quelle
Ohne echtes Scripting können Sie ein bisschen verketten:
Effektiv ähnlich wie Slowkis Antwort , jedoch zu einem Einzeiler zusammengefasst .
Das einzige andere, woran ich denken kann, ist an der Umask zu basteln. Am besten in einer Subshell, damit die aktuelle Umgebung nicht verschmutzt wird:
Zwei Probleme damit.
creat()
Systemaufruf angegebene Stufe erhöhen (0666 scheint das zu sein, was Bash verwendet).umask
nur Datei gilt Schöpfung ).quelle
cat
. (Obwohl dies nicht dem Standardmuster nutzloser Verwendungen von folgtcat
.) (2) Ich nehme an, Sie wollten damit sagen, dass bash beim Erstellen von Dateien standardmäßig den Modus 0666 verwendet, und deshalb habe ich Ihre Antwort bearbeitet, um dies zu sagen. (Siehe das , das … (Fortsetzung)umask
In diesem Zusammenhang würde also auch ein Wert von 22, 23 oder 32 funktionieren (Sie müssen keine führenden Nullen verwenden ; wann) Modi undumask
Werte werden numerisch angegeben, sie werden immer als oktal interpretiert.22
wird üblicherweise herkömmlich verwendet.Wenn die Umleitung die falschen Berechtigungen festlegt, z.
Ich glaube, Sie können etwas verwenden, wie es xynomorf gegeben hat, und die Bedenken von Orsiris de Jong mit einer geringfügigen Änderung ansprechen, um die Bash-Prozess-Substitution zu verwenden .
Verwenden Sie diese Option,
umask 0077
um den Modus abzurufen600
und anderen Benutzern das Anzeigen des Inhalts zu untersagen.quelle
Wenn Sie im Gegensatz
umask
zur Prozessersetzung zu einem Skript umleiten möchten,install
können Sie auch das Ausführungsbit setzen:<()
Platziert die Ausgabe in einer temporären Datei, siehe Prozessersetzungquelle