Як я можу змінити umask лише для однієї команди?


15

Як я можу інтерактивно виконувати команду в Linux (zsh, якщо це має значення) з іншим umask за замовчуванням, лише для однієї команди? Можливо, комбінація команд, об’єднаних в один рядок? Нова umask повинна застосовуватися лише до цієї команди та повертатися до її значення за замовчуванням для наступної введеної команди.

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

Відповіді:


19

Запустіть передплату :

(umask 22 && cmd)

Тоді новий umaskлише змінить цю передплату.

Зауважте, що zshвиконується остання команда доподібної частини в процесі підключення, а не форкується ще одна, а це означає, що якщо ця команда є зовнішньою, ви навіть не витрачаєте процес, це просто, що вилка робиться раніше (тому umaskробиться у дочірньому процесі, який пізніше виконає вашу команду).


2

Ви можете загорнути його в сценарій оболонки. umask успадковує всі дитячі процеси.

cmd.sh:

umask 0022
cmd

Або, якщо ви хочете зробити це в одному командному рядку, ви можете викликати оболонку так: "$ (umask 0022; cmd)"
Rob Bos

1
Я плутати $ (з $(в своєму коментарі, тепер я розумію: ( umask 0022; cmd ).
доношено успішно

ой, ну, принаймні хтось уточнив, що ^^
Роб Бос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.