Командная оболочка fish
2025-01-01
·
3 мин. для прочтения
Командная оболочка fish.
Содержание
1 Общая информация
- Сайт: https://fishshell.com/
- Обучающая информация: https://fishshell.com/docs/current/tutorial.html
- Не является POSIX-совместимой.
2 Установка
- Gentoo:
emerge app-shells/fish
3 Интеграция с системой
- fish может устанавливаться:
- как оболочка по умолчанию (запускаться сразу при входе в систему);
- запускается вручную как дочерний процесс текущей оболочки по умолчанию.
3.1 Установка fish в качестве оболочки по умолчанию
- Этот режим требует понимания функционирования fish и её скриптового языка.
- Текущие скрипты инициализации и переменные окружения пользователя должны быть перенесены в новое окружение fish.
- Установите оболочку конкретного пользователя на
/usr/bin/fish
:$ chsh -s /usr/bin/fish
- Если вы используете
systemd-homed
:$ homectl update --shell=/usr/bin/fish
- Необходимо перенести настройки из скриптов инициализации bash:
/etc/profile
,~/.bash_profile
,/etc/bash.bashrc
,~/.bashrc
.
3.2 Установка fish только в качестве интерактивной оболочки
- Все скрипты инициализации Bash запускаются как обычно.
- fish работает поверх Bash в интерактивном режиме, подключённом к терминалу.
- При входе будут выполняться текущие скрипты bash.
- Переменные окружения текущего пользователя остаются неизменными и экспортируются в fish, которая затем запускается как дочерний процесс bash.
3.2.1 Запуск fish через .bashrc
- Это наиболее универсальное решение.
- Добавьте строку
exec fish
в подходящий файл настроек Bash, например~/.bashrc
. - Можно использовать команду
bash --norc
, чтобы вручную войти в bash без выполнения команд из~/.bashrc
(чтобы не запускать fish). - Чтобы команды наподобие
bash -c 'echo test'
выполняли команду в bash вместо запуска fish, можно написатьif [ -z "$BASH_EXECUTION_STRING" ]; then exec fish; fi
вместо простогоexec
. - Можно настроить вход в fish только в том случае, если родительский процесс не является fish. Это позволяет быстро войти в bash, вызвав команду bash, без потери настроек из
~/.bashrc
:if [[ $(ps --no-header --pid=$PPID --format=comm) != "fish" && -z ${BASH_EXECUTION_STRING} ]] then SHELL=/bin/fish exec fish fi
Распечатка 1: ~/.bashrc
3.2.2 Использование настроек эмулятора терминала
- В большинстве терминалов для запуска оболочки используется аргумент
-e
. - Например, для gnome-terminal:
gnome-terminal -e fish
- В эмуляторах терминала, которые не поддерживают установку оболочки (например, lilyterm):
SHELL=/usr/bin/fish lilyterm
3.2.3 Использование настроек терминального мультиплексора
- Для tmux добавьте следующее в файл
~/.tmux.conf
:set-option -g default-shell "/usr/bin/fish"
4 Интеграция с разным программным обеспечением
4.1 Midnight Commander
4.1.1 Выход в текущий каталог
- При выходе командная оболочка вернёт вас в тот каталог, в котором вы запустили Midnight Commander.
- Если вы хотите, чтобы оставался текущий каталог, выбранный в Midnight Commander, можно использовать специальный скрипт-обёртку, который выполнит переход в текущий каталог после закрытия
mc
. - Используйте код https://gist.github.com/halicki/58cedaf90f3e85277a799cef8217fc72.
- Поместите его в
~/.config/fish/functions/mc.fish
. - Можно также выполнить его в командной оболочке fish и сохраните функцию:
funcsave mc
5 Настройка
5.1 Общая информация
- Файл настроек
~/.config/fish/config.fish
запускается при каждом входе. - Если переменная должна быть сохранена, её следует установить как универсальную, а не определять в вышеупомянутом файле настроек.
- Пользовательские функции находятся в каталоге
~/.config/fish/functions/
в файлахfunction_name.fish
.
5.2 Веб-интерфейс
- Цвета терминала fish, строка приглашения, функции, переменные, история, привязки и сокращения могут быть настроены через интерактивный веб-интерфейс:
fish_config