Устаревшая версия Fish shell часто проявляется косвенно: перестают работать плагины из fisher, конфиг ругается на незнакомые команды, а автодополнение ведёт себя иначе, чем в свежей документации. Прежде чем обновляться, проверьте текущую версию командой fish --version — от этого зависит, какой способ обновления подойдёт и нужен ли сторонний репозиторий.
Ниже разберём, как обновить Фиш на разных системах, что проверить после обновления и как откатиться, если что-то пошло не так. Точные названия пакетов и репозиториев зависят от вашего дистрибутива, поэтому перед установкой стоит свериться с официальной документацией проекта fish shell.
Проверка текущей версии Fish
Откройте терминал и выполните:
fish --version
Команда выведет строку вида fish, version X.Y.Z. Сравните её с актуальной версией на официальном сайте проекта или в репозитории на GitHub. Если разница в несколько мажорных релизов — обновление действительно нужно.
Дополнительно полезно проверить, откуда установлен пакет. В системах на базе Debian/Ubuntu это делается командой apt policy fish, в Fedora — dnf info fish. Так вы поймёте, пришёл ли Фиш из штатного репозитория или из стороннего источника, и не будет ли конфликта при обновлении.
Обновление Fish на Ubuntu и Debian
Стандартные репозитории Debian и старых выпусков Ubuntu нередко содержат заметно устаревшую версию Фиш. Сначала попробуйте штатный путь:
sudo apt update
sudo apt install --only-upgrade fish
Если версия осталась старой, возможная причина — сам репозиторий. Проект Fish поддерживает собственный репозиторий (PPA для Ubuntu и репозиторий для Debian через openSUSE Build Service), где публикуются свежие сборки. Подключение стороннего репозитория — действие, которое вы выполняете на свой риск; точные команды добавления берите только с официального сайта проекта, так как они меняются от релиза к релизу.
Обновление на Fedora, Arch и других дистрибутивах
В Fedora Fish обычно обновляется вместе с системой: выполните sudo dnf upgrade fish или полное обновление sudo dnf upgrade. В Arch Linux и производных пакет обновляется командой sudo pacman -Syu fish — частичное обновление системы там не рекомендуется, поэтому лучше обновлять всё сразу.
Для других дистрибутивов логика та же: сначала обновить индекс пакетов, затем сам пакет. Если штатный репозиторий отстаёт от апстрима, варианты такие:
- 🐟 Подключить официальный репозиторий проекта Fish для вашего дистрибутива.
- 📦 Использовать универсальный формат пакетов, если он поддерживается вашей системой.
- 🍺 Установить через Homebrew on Linux — brew держит относительно свежие версии.
- 🔧 Собрать из исходников — вариант для опытных, требует установки зависимостей для сборки.
Обновление Fish на macOS
На macOS самый распространённый способ установки Фиш — Homebrew. Обновление выполняется двумя командами:
brew update
brew upgrade fish
Если Fish ставился через MacPorts или скачанным установщиком с сайта, команды brew к нему не применимы. Проверить, какой именно бинарник запускается, можно командой which fish — путь подскажет источник установки.
Что проверить после обновления
Само по себе обновление пакета не перезапускает уже открытые сессии. Закройте и заново откройте терминал, затем снова выполните fish --version и убедитесь, что номер версии изменился.
Дальше — проверка работоспособности окружения. Новые версии Фиш иногда меняют поведение отдельных встроенных команд или убирают устаревшие возможности, поэтому старые скрипты и функции стоит прогнать вручную.
☑️ Проверка после обновления Fish
⚠️ Внимание: если Fish установлен как ваша оболочка по умолчанию и после обновления перестал запускаться, вы можете остаться без рабочего терминала в этой сессии. Заранее убедитесь, что в системе доступен запасной шелл (например,
/bin/bash), а путь к Fish в/etc/shellsуказан корректно.
Обновление плагинов и fisher
Обновление самого шелла и обновление плагинов — разные задачи. Менеджер плагинов fisher обновляет установленные расширения командой:
fisher update
Если после обновления Fish какой-то плагин выдаёт ошибки, возможная причина — несовместимость с новой версией шелла. Проверьте страницу плагина: у многих популярных расширений указана минимальная поддерживаемая версия Фиш. Иногда помогает переустановка плагина, иногда — откат шелла до выхода исправления.
Откат к предыдущей версии
Откат зависит от пакетного менеджера и не всегда возможен штатными средствами, если старая версия уже удалена из репозитория или кэша. Общие направления:
- ⏪ В Debian/Ubuntu — установка конкретной версии через
apt install fish=версия, если она ещё доступна в репозитории или кэше пакетов. - 🍺 В Homebrew — старые версии формул напрямую не поддерживаются; обычно проще удалить пакет и установить нужную сборку из официального репозитория проекта.
- 💾 Восстановление из резервной копии системы, если она делалась перед обновлением.
⚠️ Внимание: принудительная установка старой версии пакета поверх новой может нарушить зависимости системы. Перед откатом зафиксируйте текущее состояние и будьте готовы переустановить пакет начисто.
Где Fish хранит настройки
Основной конфиг — ~/.config/fish/config.fish. Пользовательские функции лежат в ~/.config/fish/functions, установленные fisher плагины — в подкаталогах conf.d, functions и completions внутри того же ~/.config/fish. Удаление самого пакета fish обычно не трогает эти файлы, но перед экспериментами каталог стоит скопировать.
Типичные проблемы и их решения
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| Версия не меняется после обновления | Открыта старая сессия шелла | Закрыть и заново открыть терминал |
| apt не находит новую версию | Устаревший штатный репозиторий | Подключить официальный репозиторий проекта |
| Ошибки в config.fish после обновления | Изменилось поведение команды | Проверить синтаксис по свежей документации |
| Плагин перестал работать | Несовместимость с новой версией | Обновить плагин через fisher update |
| Fish не запускается как login shell | Некорректный путь в /etc/shells | Проверить путь через which fish и исправить запись |
Самая частая причина «обновление не сработало» — забытая открытая сессия терминала: пакет обновился, а запущенный процесс Fish продолжает работать со старой версией в памяти.
Частые вопросы
Удалятся ли мои настройки при обновлении Fish?
Обновление пакета обычно не затрагивает пользовательский каталог ~/.config/fish, где хранятся конфиг, функции и плагины. Тем не менее перед мажорным обновлением каталог разумно скопировать.
Нужно ли заново прописывать Fish как оболочку по умолчанию?
Как правило, нет: запись в /etc/passwd и список /etc/shells при обновлении пакета сохраняются. Но если Fish переехал по другому пути (например, после перехода с одного пакетного менеджера на другой), настройку придётся повторить через chsh.
Чем обновление через PPA отличается от штатного репозитория?
Сторонний репозиторий обычно содержит более свежие версии, но его сопровождение и совместимость с вашим выпуском дистрибутива вы принимаете на себя. Штатный репозиторий стабильнее, но отстаёт от апстрима.
Можно ли обновить Fish без прав root?
Штатные пакетные менеджеры требуют прав администратора. Альтернатива — Homebrew в пользовательском каталоге или сборка из исходников с установкой в домашнюю папку, но это требует ручной настройки путей.
Как узнать, что вышла новая версия Fish?
Подпишитесь на релизы в официальном репозитории проекта на GitHub или периодически проверяйте обновления пакетного менеджера — свежие версии доходят туда с разной скоростью в зависимости от дистрибутива.