Скрипт завершения работы с рыбой

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.

1
22.05.2021, 03:07
1 ответ

Флаг завершения команды -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, это должно решить проблему дубликатов. Используя кавычки таким образом, он указывает одну длинную команду, а не отдельные.

1
28.07.2021, 11:30

Теги

Похожие вопросы