Командная оболочка fish

2025-01-01 · 3 мин. для прочтения

Командная оболочка fish.

Содержание

1 Общая информация

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
    
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.