Знакомство с оболочкой Fish
Я использовалРыбная раковинамесяцами, и я думаю, что это лучшая оболочка, которую я когда-либо использовал. По многим причинам.
Кажется, люди придерживаютсяБашкоторый является значением по умолчанию во многих системах (обновление: теперь в macOS по умолчанию используется Zsh) или используйте Zsh с таким отличным инструментом, какО мой зшчтобы сделать его еще более удивительным.
Bash, хотя и великолепен, представляет собой очень простую оболочку с ограниченным набором настраиваемых параметров. Я обычно использую его в основном для бегаBash скрипты(которые являются другой темой), а не в качестве интерактивной оболочки. Zsh предлагает множество функций, но требует небольшой настройки для настройки, что может напугать новичков. Кроме того, слишком много опций и свободы означает, что вы можете довольно легко попасть в паралич конфигурации, и в конечном итоге вам придется менять параметры 20 раз в неделю, чтобы убедиться, что вы ничего не упускаете.
Я не хочу «ломать голову» над этими замечательными проектами, которыми я пользовался много времени, а иногда и до сих пор использую. Это описание - моя попытка подчеркнуть преимущества рыбы.
Fish Shell спешит на помощь! Эта оболочка обеспечивает отличную среду и полнофункциональную конфигурацию прямо из коробки.
Мои любимые особенности Fish:
- у него есть улучшенные функции автозаполнения для уже выполненных вами команд, и одно это действительно делает мою повседневную работу быстрее и менее напряженной.
- вы начинаете вводить команду и нажимаете
up
чтобы увидеть в истории оболочки все моменты времени, когда вы использовали эту команду раньше. - вы можете установить Fish в любую систему, и он будет работать одинаково везде, без необходимости слишком много настраивать, чтобы получить необычные вещи.
Когда дело доходит до сценариев, он сильно отличается от сценариев Bash (в лучшем случае, IMHO), но вы можете запустить любой сценарий Bash при условии, что он имеет префикс#!/bin/bash
.
Сразу после установки вы получаете следующие приятные вещи:
- подсветка синтаксиса
- хорошая подсказка
- автозаполнение
- предложение параметра с подсказками на странице руководства
- веб-конфигурация
и на мой взгляд это самая удобная для новичков оболочка.
Одной из забавных вещей, которые я заметил, была домашняя страница. Сначала я не мог понять, что это что-то вроде пережитка прошлого:
Для тех, кому повезло с графическим компьютером, вы можете устанавливать цвета и просматривать функции, переменные и историю прямо на веб-странице.
Потом я понял, что это юмор программиста, и рассмеялся. Техника всегда должна приносить удовольствие, правда?
Перво-наперво: что такое оболочка?
Оболочка - это интерфейс к базовой операционной системе. Он позволяет выполнять операции с помощью текста и команд, а также предоставляет пользователям расширенные функции, такие как возможность создавать сценарии.
Установка
Установите Fish, запустивbrew install fish
на macOS.
Посмотри мойруководство по терминалу macOS
fish
установлен в/usr/local/bin/fish
.
Поскольку это, скорее всего, уже есть на вашем пути, запуститеfish
чтобы запустить Fish shell (введитеexit
чтобы вернуться в оболочку по умолчанию)
Конфигурация
Когда-то приятная вещь в Fish - это веб-конфигурация. Пробегfish_config
для запуска веб-клиента.
Отсюда вы можете
- выберите цветовую схему из списка предустановленных
- выберите подсказку из списка предопределенных
- проверить настроенные функции и переменные Fish
- посмотреть историю команд
Конфигурация хранится в~/.config/fish
папка, и здесь вы можете редактировать ее, не используя (необязательную) веб-конфигурацию.
Возможности Fish: выделение синтаксиса, автозаполнение и предложение параметров с подсказками на странице руководства.
Fish позволяет выполнять обычные команды Unix, доступные в вашей системе. Операции с файловой системой, например:
ls
перечислить файлыcd
сменить папкуrm
удалить файл или папкуmv
переместить файл в другую папку или изменить имя файлаcp
скопировать файл
Если вы запустите одну из этих команд (илиany
команда, действительно) вы начнете видеть, что слова, которые вы вводите, окрашиваются в разные цвета. Это упрощает чтение и понимание команд.
Fish также добавляет автозаполнение. Если ты бежишьcd ~/.config/fish/
раньше, а теперь вы набираетеcd
, Fish предложит команды, которые вы, возможно, захотите ввести, и вы просто нажмите стрелку вправо, чтобы принять предложение (или вы можете продолжить ввод, чтобы изменить команду). Это предложение основано на истории команд и путях к файлам.
Предложения, основанные на автозаполнении, также работают для команд. Здесь я набралc
и нажал вкладку:
Fish также предлагает параметры и способы их использования. Типls -
и нажмитеtab
. Список параметров, которые вы можете использовать, и их значения показаны справа ниже:
Эта встроенная справка создается изстраницы руководства, полезная справка по оболочке (попробуйте запуститьman ls
за полную помощь).
Установите Fish в качестве оболочки по умолчанию
Если вам понравится Fish, когда вы попробуете его, и вы хотите сделать его своей оболочкой по умолчанию, откройте файл/etc/shells
. я используюpico
делать небольшие правки файлов с помощьюpico /etc/shells
, но вы можете использовать любой редактор, который вам нравится, даже VS Code сcode /etc/shells
.
Он должен содержать что-то похожее на:
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
Добавьте эту строку в конце, чтобы добавить раковину Fish:
/usr/local/bin/fishnext, run
chsh -s /usr/local/bin/fishenter your password, and the shell will change for your user.

Plugins
You can install Fish plugins.
Fisher is a popular Fish package manager.
Install it using
curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fishand it’s available with the fisher
command.
Now a package can be installed using fisher add <github-repository-path>
and removed using fisher rm <github-repository-path>
.
List all plugins installed using fisher ls
.
Run fisher
to update all the packages you installed.
Popular plugins are
edc/bass
make Bash utilities usable in fish
jorgebucaran/fnm
Node.js version manager
Here is a list of packages you can install.
POSIX compliance
Various shells comply with the POSIX shell command standard.
POSIX means
- Portable
- Operating
- System
- Interface
- X (for Unix)
and it’s a standard meant to unify the various Unix environment that were built over time. There is a shell command standard subset, which is meant as a way to unify how Unix shells work.
Unix is a specification/standard for a family of operating systems. Linux and macOS are based on Unix (Windows is not).
bash
, ksh
and others are POSIX compliant. Being POSIX compliant makes scripts written with POSIX compatibility work across POSIX compliant shells.
Fish (like sh
or csh
for example) is not compliant, so it’s not a POSIX shell, and this means that writing commands and scripts for Fish is different. Scripts written for Fish won’t work outside of Fish. Just like csh
scripts only work on csh (and derivatives)
Why is it different? Various reasons, but I imagine having to support POSIX means the shell must adhere to a common language that might interfere with the shell philosophy and way of working. Not everyone want to have that baggage of tech to support forever.
This will very rarely be a problem with executing commands, but you need to keep it in mind when it comes to scripting and programming.
Download my free Linux Commands Handbook
More cli tutorials:
- The Bash shell
- Introduction to Bash Shell Scripting
- The Fish Shell
- Shell, watch file content as it populates
- How to exit Vim
- UNIX Editors
- The UNIX Filesystem Commands
- Unix Shells Tutorial
- How to set an alias in a macOS or Linux shell
- A practical guide to Homebrew
- How to fix the xcrun invalid active developer path error in macOS
- The Command Line for Complete Beginners
- Introduction to Linux
- How to find the process that is using a port
- Linux commands: mkdir
- Linux commands: cd
- Linux commands: pwd
- Linux commands: rmdir
- Linux commands: ls
- Linux commands: mv
- Linux commands: cp
- Linux commands: less
- Linux commands: tail
- Linux commands: touch
- Linux commands: cat
- Linux commands: find
- Linux commands: ln
- Linux commands: ps
- Linux commands: echo
- Linux commands: top
- Linux commands: kill
- Linux commands: killall
- Linux commands: alias
- Linux commands: jobs
- Linux commands: bg
- Linux commands: fg
- Linux commands: type
- Linux commands: which
- Linux commands: whoami
- Linux commands: who
- Linux commands: clear
- Linux commands: su
- Linux commands: sudo
- Linux commands: chown
- Linux commands: chmod
- Linux commands: passwd
- Linux commands: open
- Linux commands: wc
- Linux commands: history
- Linux commands: du
- Linux commands: umask
- Linux commands: grep
- Linux commands: man
- Linux commands: uname
- Linux commands: sort
- Linux commands: uniq
- Linux commands: diff
- Linux commands: nohup
- Linux commands: df
- Linux commands: xargs
- Linux commands: gzip
- Linux commands: gunzip
- Linux commands: ping
- Linux commands: traceroute
- Linux commands: tar
- Linux commands: export
- Linux commands: crontab
- Linux commands: dirname
- Linux commands: basename
- Linux commands: printenv
- Linux commands: env
- A short guide to the ed editor
- A short guide to vim
- A short guide to emacs
- A short guide to nano
- Linux, no space left on device
- How to use Netcat