Вероятно, это дубликат, но все мои поиски вызывают вопросы об ошибках, в которых отказано в разрешении.
Я запускаю команду в оболочке bash. Я хочу перенаправить вывод, чтобы добавить к файлу, который, вероятно, не существует при первом запуске. Я хочу установить определенный режим доступа к файлам, если перенаправление вывода должно создать этот файл. Есть ли способ сделать это с помощью одной команды?
Например, я мог бы попробовать
foo >> /tmp/foo.log 0644
где 0644
разрешения я хочу foo.log
в конечном итоге. Большинство команд, с которыми я экспериментировал в bash, интерпретируются 0644
как дополнительный аргумент foo
.
У меня такое ощущение, что для chmod
получения разрешения потребуется вторая команда до или после записи в нее.
Я использую GNU Bash 4.2.25 и Ubuntu 12.04, если это имеет значение - общие ответы предпочтительнее.
источник
umask
ответы лучше, и один из них должен быть принят.Я знаю, что это старый вопрос, но я хотел добавить свои два цента.
У меня была та же идея, и я предложил решение, похожее на BowlesCR . Проблема с его решением состояла в том, что моя команда (
foo
) не сработала бы, если бы я изменил umask перед его запуском, так что это мое решение проблемы:Здесь
umask
влияет только перенаправлениеfoo.log
в подоболочку. Все остальное остается неизменным.Немного запутанный, но это работает.
источник
Без настоящих сценариев вы можете немного цепляться:
Эффективно похоже на ответ Словки , но сжато в одну строчку .
Единственное, о чем я могу думать, это возиться с маской. Лучше всего сделать это в подоболочке, чтобы она не загрязняла текущую среду:
Две проблемы с этим, хотя.
creat()
системном вызове (похоже, что Bash использует 0666).umask
применяется только к созданию файла ).источник
cat
. (Хотя это не соответствует стандартному шаблону бесполезного использованияcat
.) (2) Я предполагаю, что вы хотели сказать, что bash по умолчанию использует режим 0666 при создании файлов, и поэтому я отредактировал ваш ответ, чтобы сказать так. (Смотрите это , это ... (продолжение)umask
значение 22, 23 или 32 также будет работать, в этом контексте (вам не нужно использовать ведущий ноль (и); когда режимы иumask
значения указываются численно, они всегда интерпретируются как восьмеричные).22
чаще, традиционно используется.Когда перенаправление устанавливает неправильные разрешения, например:
Я полагаю, что вы можете использовать что-то, что дал xynomorf, и решить проблему с stderr от Орсириса де Йонга с небольшой модификацией, чтобы использовать замену процесса bash .
Естественно, используйте,
umask 0077
чтобы получить режим600
и запретить другим пользователям просматривать содержимое.источник
Если вы хотите перенаправить в скрипт, в отличие от этого
umask
, с подстановкой процесса, иinstall
вы также можете установить бит выполнения:<()
помещает вывод во временный файл, см. Process-Substitutionисточник