Linux: bat cache –build сообщает “неожиданный аргумент ‘–build’ найден”

Вопрос или проблема

Этот вопрос касается “bat”, замените “cat” с подсветкой синтаксиса, не оконных .bat файлов.

Согласно README на странице GitHub bat, а также странице man, я должен запустить bat cache --build, когда хочу добавить новое определение синтаксиса. Но когда я это делаю, я получаю следующую ошибку:

ошибка: неожиданный аргумент '--build'.

Попытка запустить просто bat cache выдает

[bat ошибка]: ‘cache’: Нет такого файла или директории (ошибка в ОС 2)

но, к сожалению, не уточняет, какой файл он ожидал найти. Я предполагаю, что у него есть проблемы с созданием кеша в первый раз.

  • Ваша версия bat обновлена?

  • Упоминает ли bat --help, что вы можете использовать bat cache?

  • Существует ли файл с именем cache в текущей директории? Если да, попробуйте перейти в другую директорию.

Ожидаемый результат:

[deuterium ~]$ wget 'https://github.com/sharkdp/bat/releases/download/v0.23.0/bat-v0.23.0-x86_64-unknown-linux-gnu.tar.gz'

[deuterium ~]$ tar xvf bat-v0.23.0-x86_64-unknown-linux-gnu.tar.gz

[deuterium ~]$ cd bat-v0.23.0-x86_64-unknown-linux-gnu/

[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat --help
Клон cat(1) с подсветкой синтаксиса и интеграцией с Git.

Использование: bat [ОПЦИИ] [ФАЙЛ]...
       bat <КОМАНДА>

Аргументы:
  [ФАЙЛ]...
          Файл(ы), которые следует вывести / конкатенировать. Используйте дефис ('-') или вовсе не указывайте аргумент, чтобы прочитать из
          стандартного ввода.

Опции:
  -A, --show-all
          Показать непечатаемые символы, такие как пробел, табуляция или новая строка. Эта опция также может быть использована для
          вывода бинарных файлов. Используйте '--tabs', чтобы контролировать ширину табуляции.

      --nonprintable-notation <notation>
          Установить нотацию для непечатаемых символов.

          Возможные значения:
            * unicode (␇, ␊, ␀, ..)
            * caret   (^G, ^J, ^@, ..)

  -p, --plain...
          Показывать только простой стиль, без украшений. Это псевдоним для '--style=plain'. Когда '-p' используется дважды ('-pp'), это также отключает автоматическую страничную разбивку (псевдоним для '--style=plain --paging=never').

  -l, --language <language>
          Явно установить язык для подсветки синтаксиса. Язык можно указать как имя (например, 'C++' или 'LaTeX') или возможное расширение файла (например, 'cpp', 'hpp' или 'md'). Используйте '--list-languages', чтобы показать все поддерживаемые языковые названия и расширения файлов.

  -H, --highlight-line <N:M>
          Выделите указанные диапазоны строк другим цветом фона. Например:
            '--highlight-line 40' выделяет строку 40
            '--highlight-line 30:40' выделяет строки с 30 по 40
            '--highlight-line :40' выделяет строки с 1 по 40
            '--highlight-line 40:' выделяет строки с 40 до конца файла
            '--highlight-line 30:+10' выделяет строки с 30 по 40

      --file-name <name>
          Укажите имя для отображения файла. Полезно, когда данные передаются в bat из STDIN, когда bat
          не знает имя файла. Обратите внимание, что предоставленное имя файла также используется для
          определения синтаксиса.

  -d, --diff
          Показать только строки, которые были добавлены / удалены / изменены по отношению к индексу Git. Используйте
          --diff-context=N, чтобы контролировать, сколько контекста вы хотите видеть.

      --diff-context <N>
          Включить N строк контекста вокруг добавленных / удаленных / измененных строк при использовании '--diff'.

      --tabs <T>
          Установить ширину табуляции в T пробелов. Используйте ширину 0, чтобы пропустить табуляцию напрямую.

      --wrap <mode>
          Указать режим обертывания текста (*auto*, never, character). Опция '--terminal-width' 
          может использоваться дополнительно для контроля ширины вывода.

  -S, --chop-long-lines
          Укоротить все строки длиннее ширины экрана. Псевдоним для '--wrap=never'.

      --terminal-width <width>
          Явно установить ширину терминала, вместо автоматического определения. Если
          с префиксом '+' или '-', значение будет считаться смещением от фактической ширины терминала. Смотрите также: '--wrap'.

  -n, --number
          Показывать только номера строк, без других украшений. Это псевдоним для '--style=numbers'.

      --color <when>
          Указать, когда использовать цветной вывод. Автоматический режим включает цвета только если обнаружен интерактивный терминал - цвета автоматически отключаются, если вывод идет в пайп.
          Возможные значения: *auto*, never, always.

      --italic-text <when>
          Указать, когда использовать ANSI последовательности для курсивного текста в выводе. Возможные значения: always,
          *never*.

      --decorations <when>
          Указать, когда использовать украшения, которые были указаны через '--style'. Автоматический
          режим включает украшения только если обнаружен интерактивный терминал. Возможные значения:
          *auto*, never, always.

  -f, --force-colorization
          Псевдоним для '--decorations=always --color=always'. Это полезно, если вывод bat
          передается в другую программу, но вы хотите сохранить цветовую разметку / украшения.

      --paging <when>
          Указать, когда использовать постраничный вывод. Чтобы отключить постраничный вывод, используйте --paging=never' или его
          псевдоним, '-P'. Чтобы отключить постраничный вывод навсегда, установите BAT_PAGER в пустую строку. Чтобы управлять
          каким постраничным выводом используется, смотрите опцию '--pager'. Возможные значения: *auto*, never, always.

      --pager <команда>
          Определяет, какой постраничный вывод используется. Эта опция переопределяет переменные среды PAGER и BAT_PAGER. 
          Порядок по умолчанию - 'less'. Чтобы контролировать, когда используется постраничный вывод, см. опцию '--paging'. Пример: '--pager "less -RF"'.

  -m, --map-syntax <glob:syntax>
          Связывает шаблон glob с существующим именем синтаксиса. Шаблон glob сопоставляется по полному
          пути и имени файла. Например, чтобы выделить файлы *.build с синтаксисом Python, используйте
          -m '*.build:Python'. Чтобы выделить файлы с именем '.myignore' с синтаксисом Git Ignore, используйте
          -m '.myignore:Git Ignore'. Обратите внимание, что правая сторона является *именем* синтаксиса, а не
          расширением файла.

      --ignored-suffix <ignored-suffix>
          Игнорировать расширение. Например:
            'bat --ignored-suffix ".dev" my_file.json.dev' будет использовать синтаксис JSON и игнорировать '.dev'.

      --theme <theme>
          Установить тему для подсветки синтаксиса. Используйте '--list-themes', чтобы увидеть все доступные темы. Чтобы
          установить тему по умолчанию, добавьте опцию '--theme="..."' в файл конфигурации или экспортируйте
          переменную окружения BAT_THEME (например, export BAT_THEME="...").

      --list-themes
          Показать список поддерживаемых тем для подсветки синтаксиса.

      --style <components>
          Настроить, какие элементы (номера строк, заголовки файлов, границы сетки, изменения Git и т.д.)
          отображать, помимо содержимого файла. Аргумент - это запятая, разделенный список
          компонентов для отображения (например, 'numbers,changes,grid') или предопределенный стиль ('full'). Чтобы
          установить стиль по умолчанию, добавьте опцию '--style=".."' в файл конфигурации или экспортируйте
          переменную окружения BAT_STYLE (например, export BAT_STYLE="..").

          Возможные значения:

            * default: включает рекомендуемые компоненты стиля (по умолчанию).
            * full: включает все доступные компоненты.
            * auto: то же самое, что и 'default', если вывод не поступает в пайп.
            * plain: отключает все доступные компоненты.
            * changes: показывает маркеры изменений Git.
            * header: псевдоним для 'header-filename'.
            * header-filename: выводит имена файлов перед содержимым.
            * header-filesize: выводит размеры файлов перед содержимым.
            * grid: вертикальные/горизонтальные линии для разделения боковой панели
                    и заголовка от содержимого.
            * rule: горизонтальные линии для разграничения файлов.
            * numbers: показывает номера строк в боковой панели.
            * snip: рисует линии разделения между различными диапазонами строк.

  -r, --line-range <N:M>
          Печатает только указанный диапазон строк для каждого файла. Например:
            '--line-range 30:40' печатает строки с 30 по 40
            '--line-range :40' печатает строки с 1 по 40
            '--line-range 40:' печатает строки с 40 до конца файла
            '--line-range 40' печатает только строку 40
            '--line-range 30:+10' печатает строки с 30 по 40

  -L, --list-languages
          Показать список поддерживаемых языков для подсветки синтаксиса.

  -u, --unbuffered
          Эта опция существует по причинам соответствия POSIX ('u' означает 'unbuffered'). Вывод
          всегда небуферизуется - эта опция просто игнорируется.

      --diagnostic
          Показать диагностическую информацию для отчетов об ошибках.

      --acknowledgements
          Показать благодарности.

  -h, --help
          Печать справки (см. краткий обзор с помощью '-h')

  -V, --version
          Печать версии

Вы можете использовать 'bat cache', чтобы настроить синтаксисы и темы. Смотрите 'bat cache --help' для получения дополнительной информации.

[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat cache --help
Изменить кеш определения синтаксиса и темы

Использование: bat cache [ОПЦИИ] <--build|--clear>

Опции:
  -b, --build
          Инициализировать (или обновить) кеш синтаксиса / темы, загружая из исходной директории
          (по умолчанию: директория конфигурации).

  -c, --clear
          Удалить закешированные определения синтаксиса и темы.

      --source <dir>
          Используйте другую директорию для загрузки синтаксиса и тем.

      --target <dir>
          Используйте другую директорию для хранения закешированного набора синтаксиса и тем.

      --blank
          Создайте совершенно новые наборы синтаксиса и тем (вместо добавления к набору по умолчанию).

      --acknowledgements
          Создать acknowledgements.bin.

  -h, --help
          Печать справки (см. краткий обзор с помощью '-h')

[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat cache --build
Темы не были найдены в '/home/user/.config/bat/themes', используется набор по умолчанию.
Синтаксисы не были найдены в '/home/user/.config/bat/syntaxes', используется набор по умолчанию.
Запись набора тем в /home/user/.cache/bat/themes.bin ... хорошо
Запись набора синтаксиса в /home/user/.cache/bat/syntaxes.bin ... хорошо
Запись метаданных в папку /home/user/.cache/bat ... хорошо

[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat --version
bat 0.23.0 (871abd2)

[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat foo
[bat ошибка]: 'foo': Нет такого файла или директории (ошибка в ОС 2)

Это должно работать без предварительного создания ~/.config/bat.

Краткий ответ: У вас (вероятно) есть конфликтующий псевдоним

Запустите command bat cache --build или /usr/bin/bat cache --build.

У меня были точно(!) такие же две проблемы.

Есть большая вероятность, что у вас есть псевдоним bat в вашей системе, как у меня, который конфликтует с bat cache. У меня был bat="bat --color=always". bat тогда ожидает, что будет передан файл, вот и ошибка 'cache': Нет такого файла или директории (ошибка в ОС 2).

Ответ или решение

Проблема, с которой вы столкнулись, заключается в том, что команда bat cache --build выдаёт ошибку unexpected argument '--build' found. Это может происходить по нескольким причинам, но наиболее вероятной является конфликт с алиасом, установленным в вашей системе.

Описание проблемы

При вызове команды bat cache --build, программа ожидает, что аргументы будут переданы именно в формате, предусмотренном для этой команды. Если у вас есть алиас (например, bat="bat --color=always"), это может создать конфликты, поскольку алиас будет пытаться дополнительно передать аргументы, которые не ожидаются для команды cache. Также сообщение об ошибке cache: No such file or directory (os error 2) подразумевает, что bat пытается интерпретировать cache как файл, что также может быть следствием используемого алиаса.

Решение

  1. Проверьте алиасы: Введите команду alias в терминале, чтобы просмотреть все установленные алиасы. Найдите алиас для bat. Если он установлен, его необходимо изменить или удалить. Например, чтобы удалить алиас, используйте:

    unalias bat
  2. Запустите bat без алиаса: Если вы не хотите удалять алиас, вы можете запустить команду без алиаса с помощью:

    command bat cache --build

    или указав полный путь к исполняемому файлу:

    /usr/bin/bat cache --build
  3. Обновите bat: Убедитесь, что у вас установлена последняя версия bat. Иногда устаревшая версия может не поддерживать определённые функции. Чтобы обновить bat, выполните:

    sudo apt update
    sudo apt install bat

    (или эквивалентные команды для вашей дистрибуции).

  4. Проверка документации: Используйте команду bat --help и bat cache --help, чтобы удостовериться, что синтаксис команды соответствует ожидаемому. Убедитесь, что вы видите параметры --build в выводе команды bat cache --help.

  5. Создание директорий конфигурации: Если у вас не были созданы директории ~/.config/bat, попробуйте их создать вручную:

    mkdir -p ~/.config/bat/syntaxes ~/.config/bat/themes

Заключение

После выполнения этих шагов команда bat cache --build должна работать без ошибок. Если проблемы сохраняются, проверьте наличие других конфигураций или установленных пакетов, которые могли бы нарушать работу bat.

Оцените материал
Добавить комментарий

Капча загружается...