Как я могу изменить 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 ).
удачно сделано

Ой, ну, по крайней мере, кто-то разъяснил, что ^^
Роб Бос
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.