Как я могу изменить umask только для одной команды?

15

Как я могу в интерактивном режиме выполнить команду в Linux (zsh, если это имеет значение) с другим значением umask по умолчанию, только для одной команды? Возможно, сочетание команд в одной строке? Новый umask должен применяться только к этой команде и возвращаться к значению по умолчанию для следующей введенной команды.

В идеале команда должна быть независимой от действующего значения umask по умолчанию до его ввода (другими словами, значение umask по умолчанию указывать не обязательно).

Эндрю Ферье
источник

Ответы:

19

Запустить подоболочку :

(umask 22 && cmd)

Тогда новый umaskтолько изменит эту подоболочку.

Обратите внимание, что zshвыполняется последняя команда subshell в процессе subshell вместо разветвления другой, что означает, что если эта команда внешняя, вы даже не тратите впустую процесс, просто разветвление выполняется раньше (то umaskесть в дочернем процессе, который позже выполнит вашу команду).

Стефан Шазелас
источник
2

Вы можете обернуть его в сценарий оболочки. Umask наследует все дочерние процессы.

cmd.sh:

umask 0022
cmd
Роб Бос
источник
Или, если вы хотите сделать это в одной командной строке, вы можете вызвать такую ​​оболочку, как «$ (umask 0022; cmd)»
Роб Бос
1
Я путать $ (с $(в своем комментарии, теперь я понимаю: ( umask 0022; cmd ).
удачно сделано
Ой, ну, по крайней мере, кто-то разъяснил, что ^^
Роб Бос