Is there any specific explanation for why a "direct kernel call" would be measurably faster
Я думаю, что печально известный случай, когда это действительно имеет значение, - это если ваша файловая система не выполняет достаточного упреждающего чтения, учитывая размер вашего каталога и на -задержку запроса вашего дискового устройства . т.е. это может быть выше для занятых дисков (, длинных очередей запросов )или дисков, доступ к которым осуществляется через сеть.
http://be-n.com/spw/you-can-list-a-million-files-in-a-directory-but-not-with-ls.html
В большинстве случаев объем буферизации, используемый glibc, не вызывает никаких проблем. Указание на эту крайность как на оправдание обхода обычного кода буферизации может привести к вызовам «преждевременной оптимизации» или аналогичному раздражению :-).
https://github.com/BurntSushi/walkdir/issues/108
Если вы не слишком устали от чтения Линуса, у него есть несколько комментариев по поводу упреждающего чтения каталога файловой системы. Они могут быть или не быть показательными.
https://lore.kernel.org/lkml/20061229171654.e6e1b1c7.akpm@osdl.org/T/#u
ext4 _readdir ()не был изменен, чтобы удовлетворить разглагольствования Линуса. Я также не вижу желаемого им подхода, используемого в readdir ()других файловых систем. Я думаю, что XFS использует (физически индексированный )буферный кеш для каталогов [по крайней мере, это означает, что он не может не воспользоваться основной реализацией упреждающего чтения, если каталог фрагментирован]. bcachefs вообще не использует кэш страниц для readdir (); он использует свой собственный кеш для btrees. Я мог что-то упустить в btrfs.
Флаг завершения команды -n
позволяет указать условие выполнения. В этом случае вы можете использовать функцию __fish_seen_subcommand_from
, чтобы указать, встречалась ли уже подкоманда -I
.
После этого вы можете указать флагом -a
команду, которую хотите запустить в ()
.
complete -f --command pacstall -n "__fish_seen_subcommand_from -I" -a "(curl -s (cat /usr/share/pacstall/repo/pacstallrepo.txt)/packagelist)"
В качестве примечания: в fish вы не используете символ $
при захвате результата команды, как вы указали в своем вопросе.
Что касается вашего последнего пункта в конце. Если вы удалите кавычки из set
, это должно решить проблему дубликатов. Используя кавычки таким образом, он указывает одну длинную команду, а не отдельные.