Это ответ на вопрос "почему это происходит?"
Да, somefile.txt
будет фактически создан до запуска ls
.
$ utility >file
Первое, что происходит, это то, что оболочка замечает перенаправление, создает файл
(или усекает его, если он уже существует), затем выполняет утилиту
со своим стандартным выходным потоком, идущим в файл
.
Утилита, как правило, не осведомлена о том, куда направляется ее стандартный вывод (некоторые, например ls
, проверяют, является ли это телетайпом или нет, и соответствующим образом меняют свое поведение), поэтому она не имеет значения, пишет ли он в обычный файл, канал, файл устройства или сокет. Это определенно не связано с созданием этого файла.Таким образом, задача оболочки состоит в том, чтобы удостовериться, что сантехника на месте, прежде чем процесс будет запущен, что включает в себя создание или усечение файла с именем file
в приведенном выше примере.
Ответы на вашу проблему с удалением всех файлов, кроме самых новых, см. в вопросе «удалить старые файлы»
Прочтите страницу руководства. Совершенно ясно, в чем заключается ошибка:
/usr/bin/pkg update [-fnvq] [-g path_or_uri ...]
[--accept] [--licenses] [--no-index] [--no-refresh] [--no-be-activate]
[--no-backup-be | --require-backup-be] [--backup-be-name name]
[--deny-new-be | --require-new-be] [--be-name name]
[--reject pkg_fmri_pattern ...] [pkg_fmri_pattern ...]
pkg update --accept
, а не pkg --accept update.