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).

Andrew Ferrier
quelle

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).

Stéphane Chazelas
quelle
2

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

cmd.sh:

umask 0022
cmd
Rob Bos
quelle
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