Wie kann ich die Umask nur für einen Befehl ändern?


12

Wie kann ich einen Befehl unter Linux (zsh, falls wichtig) interaktiv mit einer anderen Umask als der Standardeinstellung für nur einen Befehl ausführen? Vielleicht eine Kombination von Befehlen in einer einzigen Zeile? Die neue umask sollte nur für diesen Befehl gelten und für den nächsten eingegebenen Befehl auf den Standardwert zurückkehren.

Im Idealfall ist der Befehl unabhängig von der vor seiner Eingabe gültigen Standard-Umask (mit anderen Worten, die Standard-Umask muss nicht angegeben werden).

Antworten:


17

Starten Sie eine Subshell :

(umask 22 && cmd)

Dann umaskändert das Neue nur diese Unterschale.

Beachten Sie, dass zshder letzte Befehl der Subshell im Subshell-Prozess ausgeführt wird, anstatt einen anderen zu forken. Wenn dieser Befehl extern ist, verschwenden Sie nicht einmal einen Prozess, sondern nur, dass der Fork früher ausgeführt wird (also ist der Vorgang umaskerledigt) im untergeordneten Prozess, der später Ihren Befehl ausführt).


2

Sie können es in ein Shell-Skript einschließen. umask erbt an alle untergeordneten Prozesse.

cmd.sh:

umask 0022
cmd

Wenn Sie dies in einer Befehlszeile tun möchten, können Sie eine Shell wie diese aufrufen: "$ (umask 0022; cmd)"
Rob Bos,

1
Ich verwirrte $ (mit $(in Ihrem Kommentar, jetzt verstehe ich: ( umask 0022; cmd ).
Donothings erfolgreich

whoops, na ja, zumindest hat jemand klargestellt, dass ^^
Rob Bos
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.