1

Когда я evince * в папке с большим количеством PDF-файлов, что отправляется evince? Получает ли evince X аргументов или X открывается, когда каждый получает один аргумент (один файл)?

1 ответ1

1

Bash выполняет расширение оболочки в каждой командной строке. Одним из таких расширений является расширение имени файла, которое заменяет * в соответствии с правилами сопоставления с образцом .

В случае evince * он заменяет * содержимым текущего рабочего каталога. Содержимое означает имена обычных файлов, подкаталогов, ссылок и т.д. Dot-файлы исключаются. В основном то, что вы получаете от запуска ls . В вашем случае имена файлов PDF.

Поэтому двоичный файл evince исполняется Bash только один раз, а аргументы - это имена файлов в алфавитном порядке, содержащиеся в текущем рабочем каталоге. Способ, которым Evince обрабатывает свой запуск впоследствии, зависит от Evince или любой другой инфраструктуры или библиотеки, от которой он зависит, но barebones X здесь не делает ничего особенного. Evince или X даже не знают, что это было выполнено с * . Например:

$ ls -a
. .. .hiddendoc.pdf doc1.pdf doc2.docx otherdoc.pdf somedir
$ evince *
# is equivalent to
$ evince doc1.pdf doc2.docx otherdoc.pdf somedir

Если вы хотите узнать, как * расширяется, просто запустите echo * . Вы можете заметить, что если рабочий каталог пуст (содержит только точечные файлы), звездочка не раскрывается и остается в качестве аргумента для выполнения команды.

Как упомянуто в связанном руководстве по Bash, есть ряд настроек, которые изменяют это поведение. Не говоря уже о других снарядах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .