11 особенностей Fish Shell, которые делают её лучше, чем Bash (перевод). Linux статьи
Написать статью
Войдите, чтобы писать статьи

11 особенностей Fish Shell, которые делают её лучше, чем Bash (перевод)

39

Fish Shell

Материал написан пользователем сайта.

На сайте коллега scorpii писал статью о сравнении shell’ов (командных оболочек), после чего я решил попробовать zsh, но первое, с чем я столкнулся — куча настроек и попытка привести оболочку к привычному виду bash (под видом я понимаю привычное поведение). Тогда возился, возился и вернулся на bash, как-то не дойдя до Fish …

Попалась мне в ленте статья о преимуществах Fish, поэтому вновь открыл материал от scorpii для попробовать нечто новое. Менял bash по этой статье. В этом материале будет перевод и адаптация на русский язык материала от It’s FOSS.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _

Вам следует попробовать fish, даже если Вы веган или у Вас аллергия на морепродукты :P

Bash — самая распространенная оболочка. Zsh — самая популярная среди разработчиков. Но Fish — самая недооцененная.

Я не преувеличиваю. Fish действительно является оболочкой, которую не замечают и которая может отлично подойти как новичкам, так и продвинутым FOSS’ерам. Fish предоставляет целый ряд возможностей, которые делают её привлекательной — от подсветки синтаксиса до сокращений (моя любимая) — здесь есть множество новинок. Позвольте мне поделиться с вами некоторыми из моих любимых особенностей Fish shell.

1. Подсветка синтаксиса

Лучше обнаружить ошибки до того, как они будут выполнены. Это экономит много времени, энергии и разочарований. Большинство современных редакторов кода имеют встроенную подсветку синтаксиса. Fish имеет эту функциональность, встроенную в саму оболочку, и работает с командами Linux.

Неправильные команды? Вы видите, что они выделены красным (или у кого какой цвет в настройках терминала). То же самое касается аргументов и опций, несоответствующих контексту.

Это можно заметить на анимациях ниже: предлагаемые пути и команды показываются блёклыми цветами.

2. Автодополнение

Оболочка Fish предлагает команды по мере ввода, которые позже можно выполнить соответствующим образом с помощью клавиши табуляции.

Анимация 1. Выбор возможной команды

По мере ввода предложения будут отображаться цветом, чтобы сделать их более доступными. Если вся строка предложения вас устраивает, вы можете нажать стрелку вправо, чтобы завершить ее полностью, либо Tab, чтоб увидеть другие предложения.

Если ввести меньшую часть команды и нажать Tab, то будут предложены варианты, которые начинаются с введённых символов; если бóльшую, то сама команда будет дописана. По стрелке вправо будет дописан предлагаемый аргумент, Alt + → будет дополнять по-одному слову.

3. Интерактивная справочная страница (man) с параметрами команд

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

Во-первых, вам нужно проанализировать справочную страницу, что можно сделать выполнив

fish_update_completions

Теперь, если вы наберёте команду, поставите дефис для опций, а затем нажмёте кнопку Tab, появится предложение о возможных опциях с их краткими описаниями (Анимация 2)

Анимация 2. Выбор ключей команды по клавише Tab

Вы можете пролистать варианты и выбрать, прочитав о работе, из появившегося списка. Это немного проще, чем набирать команду -h.

4. Аббревиатуры вместо сокращений (алиасов)

Аббревиатуры в Fish похожи на расширение текста. Здесь вы заменяете часто используемый код легко доступным сокращением. Например, я использовал sch как сокращение команды pacman -Ss для поиска пакетов.

abbr -a sch pacman -Ss

Теперь, когда я печатаю sch и нажимаю кнопку пробела, она будет заменена на pacman -Ss.

5. Обширная веб-справка

Опытные пользователи Linux полагаются на страницы man, чтобы получить помощь по той или иной команде. А вот новая часть пользователей Linux больше полагается на Интернет.

Fish предлагает сочетание того и другого благодаря своей обширной «сетевой» справке, которая легко доступна в вашей системе, даже если нет Интернета, поскольку она хранится локально. Чтобы получить помощь при запуске Fish Shell, просто используйте:

help


Справка, открываемая в браузере

Теперь вы можете легко обращаться к обширной документации. Текст, разумеется, на английском, это браузер, поэтому тут работают браузерные переводчики (плагины и расширения).

6. Настройка на основе веб-технологий

Да, еще одна «сетевая» функция.

Чтобы изменить цвет приглашения или другие настройки, вам не нужно редактировать файлы конфигурации в терминале. Вместо этого вы можете использовать веб-настройку.

Введите следующую команду во время работы оболочки Fish:

fish_config


Настройка в браузере

Здесь вы можете изменить цвета, установить другую подсказку из уже доступного списка. Так проще внести изменения, не так ли?

7. Автоматическая подстановка cd

Если вы хотите перейти в каталог, вам не нужно вводить команду cd. Просто введите имя каталога, вот и все. Как видите ниже, можно ввести не только имя каталога, но и несколько таковых сразу.

Анимация 3. Переход по папкам без cd

Например, если вы находитесь в своем домашнем каталоге и хотите перейти в каталог «Загрузки», просто введите «Загрузки/». По мере ввода также будет предлагаться дальнейшее завершение, куда можно перейти стрелочкой. 

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

Анимация 4. Подстановка возможного адреса для перехода

8. Упрощённая навигация по пути

Если вам нужно перемещаться между каталогами, которые вы посетили, не нужно вводить путь или использовать cd .. и т.д. Просто нажмите ALT + ←|→ для перемещения вперёд и назад соответственно.

Анимация 5. История посещений

В качестве альтернативы можно набрать cdh, ввести Enter, в результате чего появится меню, где можно набрать номер соответствующий директории, в которую вы хотите  быстро вернуться.

На скриншоте ниже из /home/ перешёл в папку /mnt/Archive/Install/GNU, выбрав цифру 7, а позже в директорию /home/Картинки, выбрав из списка число 10.

Навигация в консоли с командой cdh

9. Интерактивный поиск по истории

Вы можете выполнить поиск конкретной команды в истории в интерактивном режиме на Fish. Для этого используйте сочетание CTRL+R. Появится список введённых команд и строка для поиска команды.

Анимация 6. Выбор введённых ранее команд и строка для их поиска

10. Универсальные переменные

В оболочке Fish, если вы установите переменную как универсальную, она будет доступна даже при перезапуске оболочки или после перезагрузки системы. Чтобы создать универсальную переменную, используйте:

set -U my_variable 10

Значение my_variable будет сохранено равным 10, даже если система будет перезагружена. Да, не нужно добавлять их в RC или профиль.

11. Приватный режим

Fish Shell имеет приватный режим, в котором вводимые вами команды не сохраняются в истории или на диске. Чтобы перейти в приватный режим, используйте команду:

fish -P

Как переключиться в приватный режим, команда есть, а вот как из него выйти — я не встретил.

Несколько слов от себя

Поскольку мануал на английском, то не сразу разобрался … Хотя стоит последовать совету 4 и задать этакие сократители команд. Руководство ещё нуждается в чтении, пока изучал методом тыка и смотрел поверхностно, местами. Текст в статье дополнял от себя для лучшего понимания, вот и разбирался за одно, как и переделал все анимации со своим терминалом.

Алисы как и начальную команду, выполняемую при открытии окна, задал в файле

/home/user/.config/fish/config.fish

Если я правильно понял, то задание сокращений в окне терминала командой

function alias 
	команда
end 

носит временный характер и работает до закрытия окна.

Файл с историей находится по этому адресу. Но можно открыть настройки в браузере (Совет 6), там есть вкладки с историей и сочетаниями клавиш (history и bindings)

/home/user/.local/share/fish/fish_history

Пока не смог отключить приветственную команду, этакое приглашение ко вводу (на скриншоте под пингвином). Но Fish мне нравится, буду использовать и осваивать, другим рекомендую попробовать. Не сразу сообразил, но для Fish не работают настройки цветов xfce4-terminal из настроек самого терминала, по крайней мере после внесения изменений и выбора их в браузере (пункт 6). Поэтому по ходу написания статьи фоновая картинка сменилась для читаемости. Там сменил ещё имя_пользователя2@имя_хоста перед вводимой командой.

Есть несомненные плюсы по сравнению с Bash, нужно освоиться. А как иначе?..

Fastfetch при открытии терминала приглашение ко вводу от Fish

Нашёл в мане команду для освобождения пары строчек: set -U fish_greeting

Лайков: +22
войдите, чтобы ставить лайки
39
  • Опубликовано: 27.12.2024
  • Minor748

Комментарии

scorpii
Активный пользователь
Активный
27.12.2024
09:42
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+3
войдите, чтобы ставить лайки
Когда-то писал: "советую fish, хотя сам пользуюсь zsh". Время бежит и, не замечая как, практически везде стал пользоваться fish, ибо он не требует никаких улучшений с помощью различный фреймворков, аля - ohmyzsh, ohmyposh... очень удобен и интерактивен. В качестве login shell по классике использую bash (sh). В настройках же любимых мной alacritty (kitty) выбираю именно fish. За статью (перевод) - плюсец разумеется, ибо во-время и по делу.
evgnor86
Активный пользователь
Активный
27.12.2024
18:11
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
0
войдите, чтобы ставить лайки
Может тогда накидаешь и сравнение программ терминалов? =) Вдруг после прочтения решу на то же alacritty пересесть =)
Minor748
Активный пользователь
Активный
27.12.2024
18:14
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийevgnor86Родительский комментарий
0
войдите, чтобы ставить лайки
https://pingvinus.ru/programs/system/terminals
https://ghostty.org/docs/install/binary#linux
evgnor86
Активный пользователь
Активный
27.12.2024
18:26
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
хочется авторского текста))) и одной портянкой
Minor748
Активный пользователь
Активный
27.12.2024
18:29
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийevgnor86Родительский комментарий
0
войдите, чтобы ставить лайки
https://postimg.cc/ftNX4Vbk
scorpii
Активный пользователь
Активный
27.12.2024
21:44
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийevgnor86Родительский комментарий
0
войдите, чтобы ставить лайки
Запишу в планы, но не обещаю.
Мои терминалы: alacritty, kitty
Minor748
Активный пользователь
Активный
27.12.2024
23:58
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
+1
войдите, чтобы ставить лайки
Я тоже буду рад ознакомиться, потому что использую, как правило, тот, который по умолчанию поставляется с DE. Поскольку 1+ год на Xfce, то привык к меснтому, нахожу его удобным и многого мне от него не надо.
Kitty ставил, якобы он с поддержкой gpu-ускорения, но там тоже надо настройки ковырять через текстовый файл и всё на иностранном: установил тогда картинку фоном, размеры окна мб задал и на этом всё, удалил.
evgnor86
Активный пользователь
Активный
28.12.2024
08:53
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
+1
войдите, чтобы ставить лайки
Ага, аналогично. Поставил Alacritty, покрутил, разницы не почувствовал и пользуюсь дальше Konsole =)
Евгений
28.12.2024
17:19
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
0
войдите, чтобы ставить лайки
Хорошие терминалы, мне зашел waveterm - комбайн, в связке с fish вообще отличное и универсальное решение, + поддержка всего, есть ИИ, можно добавить любые без проблем, полноценный веб-браузер и.т.п. Да вообще хоть что, хоть телевизор смотри в терминале...
disk.yandex.ru/i/gdIuRCIM0P8RxA
ResponsibleBear
27.12.2024
11:39
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Использую fish везде где есть линукс)
Отключить приглашение при входе можно простой функцией:

function fish_greeting
fortune
end

а затем сохранить ее:
funcsave fish_greeting

Так же советую вам обратить внимание на Oh My Fish, очень много тем и расцветок для fish, всячески рекомендую.

Алиасы можно создавать и вот так (мой пример):
alias --save cleanconfig="sudo dpkg -l | grep '^rc' && sudo aptitude purge ~c"
scorpii
Активный пользователь
Активный
29.12.2024
09:12
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийResponsibleBearРодительский комментарий
0
войдите, чтобы ставить лайки
> Алиасы можно создавать и вот так (мой пример):
alias --save cleanconfig="sudo dpkg -l | grep '^rc' && sudo aptitude purge ~c"

Все гораздо проще. Для сокращений создаем файл .aliases (или назовите его как душе угодно) в корне домашней папки пользователя.
Для вызова его в bash, нужно добавить в .bashrc что-то типа (аналогично будет и для других posix-совместимых):
if [ -f ~/.aliases ];
then . ~/.aliases
fi
Для вызова в fish, добавить в config.fish:
if [ -f ~/.aliases ]
source ~/.aliases
end
choice
Активный пользователь
Активный
27.12.2024
11:55
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
Понравилась последняя картинка.
Как будто Пингвин говорит "Welcome to fish" и на свет маяка наложилась цифра, как-будто эмоционально ОДИННАДЦАТЬ!!! flatpak
Minor748
Активный пользователь
Активный
27.12.2024
13:16
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийchoiceРодительский комментарий
0
войдите, чтобы ставить лайки
Я и говорю — единственный, кто на такие мелочи внимание обращает ))
firecutter
Активный пользователь
Активный
27.12.2024
12:26
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Захотелось попробовать хотя бы ради того, чтоб выяснить, как выйти из приватного режима :)
Minor748
Активный пользователь
Активный
27.12.2024
13:18
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийfirecutterРодительский комментарий
0
войдите, чтобы ставить лайки
Я, кстати, не нашёл таки, немного погуглив иностранные форумы (. Опасная штука … Там история всего-лишь не сохраняется, не минус удобство. Хорошо, если кто подскажет.
Евгений
30.12.2024
16:16
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
Да не надо ничего гуглить, fish -i вот и все
Ge1i0n
27.12.2024
12:59
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
Впервые я с ней столкнулся в Garuda и больше она меня не отпускала )Суперская и удобная оболочка
SilverSurfer
Активный пользователь
Активный
27.12.2024
14:49
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
+ Автору спасибо.
Будем ждать когда Fish будет более распространена в дистрибутивах. Особенно в дистрибутивах для новичков. Сожалею что Fish недооценена.
xKDE
Активный пользователь
Активный
27.12.2024
15:29
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Для локалхоста что душе угодно, иначе - bash. А украшалки для скриншотов терминала... баловство всё это!))
Minor748
Активный пользователь
Активный
27.12.2024
15:57
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
Что ещё можно услышать от того, кто не приемлет раскраски в терминале?..
xKDE
Активный пользователь
Активный
27.12.2024
16:01
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
Дело же ни в наличии цвета, а в отсутствии совместимости)
Minor748
Активный пользователь
Активный
27.12.2024
16:12
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
Ты зачем балуешь? Не балуй! © как у меня одногруппник в вузе говорил.

Солидарен. Я не просто так в начале сослался на статью scorpii. Он рекомендует в конце использовать bash, как наиболее растространённую, потому что она по умолчанию.
Я сам таскал(ю) от дистрибутива к дистрибутиву свой .bashrc, потому что во всех дистрибутиваз алиасы нужные работают (которые там прописаны).
xKDE
Активный пользователь
Активный
27.12.2024
16:44
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
Детские книжки всегда делают яркими и разноцветными, взрослые несколько отличаются!) Совпадение?! Не думаю))
Minor748
Активный пользователь
Активный
27.12.2024
17:17
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
В статье есть отсылка к средам разработки, которые тоже имеют подсветку синтаксиса ЯП. Да что там, даже нам любимый mousepad её имеет — я вечером включаю тёмные темы, а днём светлые. Совпадение?
Neo
Активный пользователь
Активный
27.12.2024
17:41
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
+1
войдите, чтобы ставить лайки
>> взрослые несколько отличаются

"Плейбой" что ли черно-белый ? О_о )))
xKDE
Активный пользователь
Активный
27.12.2024
17:53
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийNeoРодительский комментарий
+2
войдите, чтобы ставить лайки
По просьбам читателей наш журнал отныне будет выходить в рулонах и без текста!)
Minor748
Активный пользователь
Активный
27.12.2024
18:23
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
https://postimg.cc/pp8stH0h
evgnor86
Активный пользователь
Активный
27.12.2024
18:22
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
Фишка не в украшалках))) они как раз сахарок дополнительный. Фишка именно в интерактивности. Мне как сетевику привыкшему к интерактивной консоли на оборудовании, fish прям оказался до боли родным)
Neo
Активный пользователь
Активный
27.12.2024
17:14
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
"Про lolcat забыли ишшо !" - проскрипел древний Neo со своей теплой печки ))
evgnor86
Активный пользователь
Активный
27.12.2024
18:08
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
Я тут тоже решил приобщиться и выйти из дремучего леса bash. Попробовал сначала zsh, затем fish. На последнем и остался в итоге :) мне зашел.
Neo
Активный пользователь
Активный
28.12.2024
01:59
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Yakuake

https://postimg.cc/ZWNjZB8q
Minor748
Активный пользователь
Активный
28.12.2024
22:24
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийNeoРодительский комментарий
0
войдите, чтобы ставить лайки
Какое всё страшненькое …
Neo
Активный пользователь
Активный
28.12.2024
23:10
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
Да потыкал эту Каку и удалил )))
Терминал же он только для neofetch
enep
Активный пользователь
Активный
28.12.2024
12:21
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Тоже самое есть в zsh
Minor748
Активный пользователь
Активный
28.12.2024
22:25
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийenepРодительский комментарий
0
войдите, чтобы ставить лайки
Ждём материал о преимуществах zsh
Minor748
Активный пользователь
Активный
28.12.2024
23:04
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийenepРодительский комментарий
0
войдите, чтобы ставить лайки
Как в том анекдоте — у нас всё то же самое, только без перегородок
Minor748
Активный пользователь
Активный
05.01.2025
23:18
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Fish Shell 4.0: Rust на подходе
https://linuxiac.com/fish-shell-4-0-rust-is-coming/
igorborisov
Активный пользователь
Активный
13.01.2025
13:53
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
zsh совместима с командами bash, а fish - нет. К тому же в fish есть баги при работе через tmux. Хотя из коробки fish приятнее. К счастью, есть Oh My Zsh + данные плагины (нужно прописать их в zshrc):

#Install oh-my-zsh plugins.
#autosuggesions plugin
git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions

#zsh-syntax-highlighting plugin
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

#zsh-fast-syntax-highlighting plugin
git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting

#zsh-autocomplete plugin
git clone --depth 1 -- https://github.com/marlonrichert/zsh-autocomplete.git $ZSH_CUSTOM/plugins/zsh-autocomplete
Minor748
Активный пользователь
Активный
13.01.2025
15:45
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийigorborisovРодительский комментарий
0
войдите, чтобы ставить лайки
Оно нужно, совместимость команд, которые ты можешь переписать под fish (я так сделал с командами bash, это не сложно оказалось), менять на установку и клонирование дополнительных репозиториев, которые завтра могут перестать существовать? В fish работает всё сразу и без танцев, разве что разобраться и настроить стоит под себя. Fish установил и оно готово к работе, в отличии от zsh.
Как показали комментарии выше, нет, не стоит оно того.

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила