Как открыть файл fish

Обновлено: 07.07.2024

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

Но если вы проводите за своим инструментом до 80% рабочего времени, то желательно убедиться, что вы не тратите время впустую и что работа доставляет вам удовольствие. В этой статье я бы хотел немного рассказать про те инструменты, которыми я лично пользуюсь каждый день, и про то, как они улучшают user experience (и, часто, продуктивность) при работе с консолью и с удаленными серверами в частности.

Проблемы ssh

При работе с удаленными серверами по ssh есть много вещей, которые могут фрустрировать, но основных проблем две, и первая из них принципиально неразрешима в рамках ssh:

  1. При высоком round-trip latency (>100 ms) пользовательский ввод появляется с ощутимой задержкой, а при использовании мобильного интернета с edge (latency 1000 ms) работа становится подобна пытке
  2. При временных проблемах (несколько минут) с доставкой пакетов, соединение может порваться с write failed: broken pipe, причем узнаете вы об этом только при попытке ввода или при использовании настроек вроде keepaliveinterval

Первая проблема неразрешима потому, что ssh by-design является просто транспортом для байтов, и существующие приложения на это поведение расчитывают. Поскольку ssh не пытается интерпретировать этот поток байтов, он не может осуществлять предиктивный ввод. Лично для меня именно эта проблема наиболее актуальна, поскольку мне приходится работать с серверами в европе и США, и во втором случае задержка составляет около 200 мс и является принципиально неустранимой, по крайней мере до изобретения квантовой коммуникации или чего-нибудь подобного. Вторая же проблема проявляется в наших условиях относительно редко, но всё же неприятно переустанавливать все соединения при сбоях сети (и перезапускать упавшие приложения, если они почему-то не были запущены в screen).

Решение — mosh (MObile SHell)

Решение указанных выше проблем весьма радикально — mosh ( mosh.mit.edu ) представляет из себя отдельную клиент-серверную систему, работающую по UDP и посылающую диффы экрана вместо подхода, используемого SSH, который передает байты «как есть». Изначальное соединение происходит по ssh, но ssh лишь запускает mosh-server и выходит после этого. Из-за этого подключение к серверу с использованием mosh происходит немного дольше, чем просто по SSH.

Для того, чтобы работать через mosh вместо ssh, нужно установить mosh-клиент к себе на компьютер и mosh-server на удаленный хост. В целом, не обязательно его устанавливать общесистемно — демон работает из-под пользователя, и при соединении можно указать бинарник сервера (пример: mosh --server /home/yuriy/bin/mosh-server my-server-hostname).

Поскольку mosh посылает диффы экрана по udp, он очень сильно отличается по своим свойствам от привычного ssh через tcp/ip:

Соединение никогда не рвется
Нет никакого «соединения». При восстановлении связности сети вы снова начинаете видеть текущее состояние консоли. Вы можете также менять способ подключения к серверу, например поменять wi-fi точку доступа, и все продолжит работать. Это особенно удобно при использовании VPN через мобильный интернет, который представляет из себя образец нестабильности.

Забудьте про возможность скроллить историю колесом мыши
Локальная прокрутка не будет работать, так как mosh рисует все в альтернативном экране, и показывает только разницу с предыдущим состоянием, не пересылая остальное. Для того, чтобы история сохранялась хоть куда-нибудь, необходимо использовать screen или tmux, о котором будет рассказано далее. С некоторым напильником все же можно заставить колесо мыши работать, но ощущения все равно будут «не те».

При высокой latency включается предиктивное echo
Если вы, к примеру, используете SSH через EDGE, то я вам очень не завидую :). В этом случае mosh умеет «понимать», в каком контексте он сейчас работает и в большинстве случаев способен адекватно отображать ваш ввод еще до того, как хоть что-то придет с сервера. На иллюстрации ниже «подчеркнутый» текст — это текст, введенный пользователем, но эхо (в большинстве случаев — просто введенный пользователем текст) с сервера еще не получено. Также, даже в случае не слишком высокой latency (например, 50мс, уже заметные на глаз), mosh старается показать пользовательский ввод мгновенно, если «уверен», что в данный момент с сервера просто возвращается введенный текст. Таким образом, в случае latency порядка 50-100 мс, работа в удаленной консоли становится практически неотличимой от локальной. За исключением возможности увидеть историю, как было упомянуто выше.


Все указанные вещи достигаются за счет того, что сервер тоже «рендерит» вывод из консоли и держит текущее состояние экрана у себя в памяти. В трекере mosh'а есть предложения уметь хранить еще и историю, чтобы можно было отказаться от дополнительной прослойки в виде screen/tmux, но пока что авторы ничего не сделали в этом направлении.

Давайте теперь перейдем к тому, что такое tmux и чем он лучше screen:

Проблемы screen

К сожалению, я не большой знаток screen, поэтому из проблем я бы мог назвать только две — отсутствие поддержки разделения экрана по вертикали (вместо горизонтального по умолчанию) и медленное развитие в целом из-за очень старой кодовой базы. Удобство использования у screen тоже оставляло желать лучшего. Поддержку разделения по вертикали запилили в новой версии screen 4.2, но к тому моменту я лично уже перестал им пользоваться. В целом, screen по-прежнему является стандартом де-факто, как и ssh, и нельзя его списывать со счетов.

Что такое tmux и его преимущества перед screen

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

Представьте себе ситуацию, что вы хотите запустить какую-то длительную операцию по ssh, и у вас отваливается соединение. Или вы не хотите ждать ее завершения, потому что эта команда представляет из себя «while true; do run-daemon; done». По умолчанию, интерактивные сессии посылают сигнал SIGHUP всем процессам из этой сессии при отключении, и процессы завершаются.

Эту проблему можно решать по-разному, например использовать команду nohup, которая перенаправляет вывод в файлы и игнорирует SIGHUP. Но более интересным решением является использование терминальных мультиплексоров, например screen или tmux. При первом запуске обычно стартует новая сессия, в которой вы можете работать, и эта сессия не привязана жестко к вашему ssh-соединению. Вы можете отключиться, например закрыв вкладку с ssh-подключением, или нажав «Ctrl+B D» (то есть, сначала нажать Ctrl+B, а затем отпустить Ctrl и нажать D), и все запущенные внутри tmux приложения останутся нетронутыми. Вы можете потом подключиться к этой сессии обратно, введя «tmux attach» или screen с кучей флажков, например "-rD".


В целом, tmux выглядит более user-friendly и поддерживает из коробки довольно интересные вещи:

  1. Вышеупомянутое разделение экрана по вертикали, например с помощью Ctrl+B :split-vertical. К сожалению, новую версию screen с поддержкой такого разделения экрана все еще можно встретить не везде.
  2. Возможность подключиться к существующей сессии несколько раз — tmux attach подключит вас к существующей сессии, не «выкидывая» других подключенных пользователей
  3. Перемотка истории с помощью колеса мыши заданием опции mouse-mode on
  4. Отсутствие необходимости запускать «script» при попытке подключиться к screen другого пользователя через sudo

Скорее всего, все указанные выше вещи можно сделать и в рамках screen, просто tmux изначально спроектирован более простым для пользователя и имеет больше фич. Если вы вдруг пользуетесь iterm2, то в нем есть встроенная поддержка интеграции с tmux, что тоже может быть аргументом в его пользу.

Ну и напоследок поговорим про fish — friendly interactive shell

Недостатки bash

Честно говоря, сложно сказать, какие у баша достоинства. Самое большое достоинство баша состоит в том, что это самый распространенный шелл и что он стоит по умолчанию в большинстве дистрибутивах линукса, mac os x и даже cygwin. Также, bash является posix-совместимым, что означает, что можно заменить /bin/sh на /bin/bash в системе и «ничего не сломается». Однако интерактивные возможности баша находятся далеко позади другого распространенного конкурента в лице zsh, в баше даже нет правого prompt'а. Большинство возможностей как в bash, так и в zsh, выключены по умолчанию. Чтобы воспользоваться всеми фичами этих шеллов, нужно либо потратить значительное количество времени на их настройку, либо использовать готовые решения, например oh-my-zsh.

Интерактивный шелл 21 века — fish

Достаточно один раз увидеть, как работает fish (friendly interactive shell), и вы уже не захотите пользоваться ничем другим :). В целом, fish — это именно интерактивный шелл, не POSIX-совместимый. То есть, скрипты, написанные для /bin/sh или /bin/bash с его помощью выполнять нельзя. Синтаксис шелла немного отличается от обычного, см. примеры ниже.

Основные фичи:

  • Авто-дополнение для команд из истории и для имен файлов прямо по мере ввода, в режиме реального времени
  • Поставляется «с батарейками» — из коробки есть умное авто-дополнение для большинства команд, есть git_prompt и прочее
  • Наличие левого и правого prompt'ов, правильное вычисление их размеров, prompt задается функцией, а не строкой из PS1
  • Автоматическая история для директорий — Alt+Shift+стрелки налево-направо позволяют прозрачно возвращаться к предыдущей директории и обратно
  • «Исправленный» синтаксис, никаких больше do, then, fi, esac, $?, бэктиков (`cmd`) и множества других вещей — с адекватными подсказками — это делает fish не-POSIX шеллом, что, в общем-то, достоинством не является
  • Поддержка аббревиатур — к примеру, создав аббревиатуру «st -> git status», вы будете «вводить» «git status», как только ввели «st» — таким образом будет работать авто-дополнение и окружающие люди не будут пугаться ваших непонятных сокращений
  • Улучшенное авто-дополнение по <tab> — показываются не только сами подсказки, но и их тип (например, для git checkout показываются отдельно ветки и теги )

Есть также просто мелкие приятные улучшения:

Пример правого prompt'а с использованием CMD_DURATION и git_prompt:

Обратите внимание на синтаксис if-выражений — он больше похож на python, чем на shell. Выражения в скобках означает «вставить результат выполнения команды» — в bash это записывается как $(. ), в fish первый символ доллара не требуется.

Вот, как это выглядит:


В правом приглашении показывается время выполнения команды в миллисекундах, зеленым цветом, если команда выполнена успешно, и красным, если произошла ошибка. Желтым цветом показывается текущая ветка, если есть.

Интеграция mosh, tmux и fish, выводы

При использовании tmux и fish вместе, возможны 2 проблемы, обе которых немного неприятны, но легко решаемы:

Также, при использовании правого prompt'а в fish, а также при разделении окон по вертикали в tmux, клиент для mosh может начать сдвигать правую границу при быстром вводе, что приводит к временным артефактам при рисовании. Это происходит из-за того, что mosh не понимает, что положение рамок, разделяющих панели в tmux, а также положение правого prompt'а в fish фиксировано, и сдвигает их при вводе направо, вместе с остальным текстом.

Итого: все перечисленные выше инструменты весьма новые, и пока что не отточены до такого же состояния, как обычная связка ssh+screen+bash, но со временем ситуация улучшается, разработчики учитывают feedback от пользователей и улучшают интеграцию с другими «новыми» инструментами.

В целом, связка mosh+tmux+fish для меня решила множество мелких (и не очень) проблем, связанных с работой в удаленной консоли, не создав при этом много новых. Большое количество мелких, но удобных и полезных фич каждого из описанных инструментов, как мне кажется, стоит того, чтобы их попробовать самому.

Открываем любые файлы

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


Каждому файлу — своя программа

Определить тип файла можно просто по его расширению, после чего станет понятно и его предназначение.

Заставляем систему отображать расширения
Выбираем приложение

Чтобы увидеть, какая программа будет обрабатывать файл по умолчанию, нужно кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт «Свойства». В открывшемся окне на вкладке «Общие» вы увидите тип файла и его расширение, а также утилиту, которая назначена ответственной за открытие данных в таком формате. Если нужно другое приложение, кликните по «Изменить». Откроется список рекомендуемых программ. Если ни одна из них вас не устраивает, нажмите кнопку «Обзор», в появившемся окне зайдите в папку, соответствующую нужной утилите, и кликните по исполняемому файлу. Как правило, это имя приложения с расширением EXE.

Определяем тип файла

Конвертируем в нужный формат

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

Векторные изображения

С помощью универсального бесплатного инструмента UniConvertor вы можете преобразовывать файлы из одного векторного формата в другой. В плане импорта программа поддерживает такие расширения, как CDR, CDT, CCX, CDRX, CMX (CorelDRAW), AI, EPS, PLT, DXF, SVG и другие. Экспорт осуществляется в форматы AI, SVG, SK, SK1, CGM, WMF, PDF, PS. Утилита доступна в версиях для Windows и Linux.

Растровая графика

Программа Free Image Convert and Resize занимает мало места на жестком диске, но предлагает функции по конвертированию и преобразованию растровых изображений, в том числе в пакетном режиме. Поддерживаются следующие форматы файлов: JPEG, PNG, BMP, GIF, TGA, PDF (последний — только для экспорта).

Видеофайлы

Мощный бесплатный инструмент Hamster Video Converter обеспечивает преобразование видеофайлов из одного формата в другой. Поддерживается конвертирование в 3GP, MP3, MP4, AVI, MPG, WMV, MPEG, FLV, HD, DVD, M2TS и т. д. Доступна пакетная обработка.

Аудиоданные

Бесплатная программа Hamster Free Audio Converter от того же производителя предлагает конвертирование аудио между форматами AIFF, OGG, WMA, MP3, MP2, AC3, AMR, FLAC, WAV, ACC, COV, RM. На сайте производителя также имеются преобразователи архивных форматов и электронных книг.

Используем онлайн-сервисы

Не всегда есть возможность установить программу-конвертер на ПК — в этом случае помогут интернет-ресурсы для преобразования документов.

Zamzar
FreePDFconvert

Бесплатная утилита UniConvertor поможет быстро преобразовывать файлы векторных форматов в пакетном режиме Free Image Convert and Resize наделена простейшими функциями конвертирования и изменения размера изображений Для конвертации видео- и аудиофайлов удобно использовать программы Hamster со встроенными кодеками и набором пресетов Онлайн-ресурсы Zamzar (верхний скриншот) и FreePDFConvert — универсальные конвертеры с ограничением по объему

Просмотр любого файла

Программы-просмотрщики зачастую не позволяют работать с файлом полноценно — например, редактировать его. Но с их помощью вы сможете открыть файл и посмотреть на его содержимое.


Программа ICE Book Reader Professional является универсальным инструментом для чтения файлов электронных книг и различного рода текстовых документов, к которым относятся DOC, TXT, HTML, PDF и многие другие.

Бесплатная утилита Free Viewer открывает файлы разных форматов, отображая дополнительно окно с информацией. С ее помощью можно точно узнать, какая программа необходима для открытия того или иного файла. Кроме того, в приложении имеется встроенный конвертер, и оно позволяет установить ассоциацию для файлов на уровне ОС.


Небольшая бесплатная программа XnView послужит удобным просмотрщиком графических файлов. К тому же в ней можно выполнять элементарные операции редактирования картинок (вставка надписи, поворот, применение эффектов). Всего утилита поддерживает более 400 различных расширений и позволяет конвертировать их более чем в 50 форматов. Среди дополнительных возможностей программы — работа со сканером, создание скриншотов, запись рисунков на компакт-диск.


Если данные повреждены

Онлайн-справочники типов файлов

Прочесть о типах файлов и разобраться в их многообразии можно на специализированных онлайн-ресурсах.

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

Большинство систем поставляется с оболочкой bash, но есть и другие варианты, которые можно использовать вместо нее. Возможно, вы слышали о популярной оболочке zsh.

Примечание: Руководство было протестировано на экземпляре Ubuntu 12.04 VPS. Его можно использовать для справки или легко адаптировать к другому дистрибутиву.

Установка оболочки fish

Бинарный пакет fish можно найти в стандартном репозитории системы.

Его можно легко установить с помощью менеджера пакетов:

sudo apt-get update
sudo apt-get install fish

Вот и все, теперь оболочка fish установлена на сервер.

Запустите оболочку в текущей сессии. Позже вы узнаете, как изменить стандартную оболочку, если вам понравится работать в fish.

Командная строка изменится. Вместо $ будет символ >.

Базовые функции fish

Вы сразу же заметите некоторые преимущества этой оболочки.

Например, если вы запросите содержимое каталога, вы увидите, что все его файлы и подкаталоги автоматически заканчиваются символом, который указывает тип файла:

ls
bin/ etc/ lib/ media/ proc/ sbin/ sys/ var/
boot/ home/ lib64/ mnt/ root/ selinux/ tmp/ vmlinuz@
dev/ initrd.img@ lost+found/ opt/ run/ srv/ usr/

Это полностью совпадает с выводом команды ls –F, которая классифицирует контент по типу.

Если вы введете путь к файлу (относительный или абсолютный), вы увидите, что оболочка подчеркивает пути к каталогам, чтобы было удобнее:

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

Автозаполнение

Отдельное внимание стоит обратить на продвинутое автозаполнение, которое обеспечивает клавиша TAB:

Как вы можете видеть, в данном случае оболочка fish перечисляет только каталоги для команды cd.

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

Аналогичная полезная функция – это форматирование команды man. Чтобы запросить все страницы man, можно использовать табуляцию:

Подобную справку можно получить с помощью любого терминального браузера, используя встроенную справочную систему:

help
fish home | Main documentation page | Design document | Commands | FAQ |
License
Fish user documentation
1
Table of contents
Fish user documentation
□ Table of contents
□ Introduction
□ Syntax overview
□ Help
□ Tab completion

Вы можете переходить по ссылкам, как в обычном браузере. Чтобы выйти, нужно нажать «q». Если вы хотите получить справку для определенной команды, о которой знает fish, просто используйте ее в качестве аргумента:

help cd
cd - change directory
Synopsis
cd [DIRECTORY] Description Changes the current
directory. If DIRECTORY is supplied it will become the new directory. If
DIRECTORY is a relative path, the paths found in the CDPATH environment
variable array will be tried as prefixes for the specified path. If
CDPATH is not set, it is assumed to be '.'. If DIRECTORY is not
specified, $HOME will be the new directory.
Back to index.

Чтобы просмотреть доступные команды справки help, используйте автозаполнение с помощью TAB.

Общие задачи

Многие люди, которые в течение многих лет использовали bash или даже sh, привыкли к тому, как работают эти оболочки. Оболочка fish действительно во многом наследует bash и sh, но она предлагает много улучшений.

Перенаправление, конвейеры и специальные символы

Начнем с перенаправления. Обычно перенаправление и конвейеры работают так же, как в bash:

  • |: передает вывод команды слева как ввод для команды справа.
  • <: извлекает стандартный ввод из файла справа вместо клавиатуры.
  • >:записывает стандартный вывод в файл справа.

Это обеспечивает простой способ перенаправления дескрипторов файлов. Напомним, что каждый дескриптор файла обычно ассоциируется с числом:

  • 0: стандартный ввод. По умолчанию входные данные поступают с клавиатуры.
  • 1: стандартный вывод. По умолчанию это экран.
  • 2: стандартная ошибка. Ошибки команды по умолчанию выводятся на экран.

ls /etc >ls_results.txt ^&1

Весь стандартный вывод помещается в файл ls_results.txt, а затем стандартная ошибка направляется в точку стандартного вывода (это файл выше).

Что касается специальных символов, fish снова использует большинство значений по умолчанию из bash:

  • *: отвечает любой строке символов, которая не включает «/».
  • ?: отвечает любому одиночному символу, не включая «/».

Дополнительным символом является рекурсивный подстановочный знак **. Он отвечает любой строке, включая «/».

Это позволяет легко добавить рекурсивную функциональность в команды. У ls есть рекурсивный вариант, но вы можете проверить эту функцию на ней. Попробуйте найти все файлы, которые заканчиваются на .conf в каталоге /etc:

ls /etc/**.conf
/etc/adduser.conf
/etc/apparmor/subdomain.conf
. . .

Функции и псевдонимы

Вы можете создавать функции и псевдонимы в fish с помощью простого синтаксиса.

Базовый формат выглядит так:

function function_name
function_content
end

Если вы хотите проанализировать аргументы функции, обратитесь к переменной $argv, где они хранятся в виде массива.

Например, можно сделать такую функцию, которая будет выводить все аргументы:

function say_hello
echo hello $argv
end

Ее можно вызвать с одним или несколькими аргументами, и все они будут переданы команде echo:

say_hello John Doe
hello John Doe

Если вы хотите получить доступ к определенной переменной, извлеките ее из массива аргументов по номеру (в fish массивы индексируются с 1, а не 0). Попробуйте изменить предыдущий скрипт, чтобы использовать только второй аргумент:

function hello_sir
echo hello Mr. $argv[2] end

Вызовите функцию, и вы получите другой результат:

hello_sir John Doe
hello Mr. Doe

Все функции можно просмотреть с помощью команды:

Удалить функцию может эта команда:

functions -e function_name

Для псевдонимов оболочка bash предлагает определенную команду. А fish использует тот же синтаксис функции.

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

Например, если вы хотите, чтобы команда cat включала нумерацию по умолчанию, вы могли бы переопределить команду и добавить в нее этот флаг. Не забудьте передать переменную аргумента, чтобы она могла правильно анализировать имена файлов:

function cat
command cat -n $argv
end

Теперь вызовите команду cat:

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

Упрощенная история

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

Вы можете хронологически перемещаться по истории с помощью клавиши UP. Перемещаться в обратном направлении можно с помощью клавиши DOWN. Это довольно стандартно.

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

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

Кроме того, вы можете использовать команды ALT-UP и ALT-DOWN для вызова аргументов командной строки.

Предположим, вы хотите просмотреть содержимое каталога:

ls /etc
acpi/ groff/ ltrace.conf rmt*
adduser.conf group magic rpc
alternatives/ group- magic.mime rsyslog.conf
apm/ grub.d/ mailcap rsyslog.d/
apparmor/ gshadow mailcap.order screenrc
. . .

Вы понимаете, что это нужный каталог, и хотите перейти в него. Введите новую команду:

Теперь можно вставить аргументы из последней команды, нажав клавиши ALT-UP:

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

Для этого введите:

Вы можете перемещаться вниз и вверх по истории каталогов, нажимая ALT-LEFT и ALT-RIGHT в пустой командной строке. Это позволяет вам легко переключаться между каталогами.

Создание конфигурационных файлов и изменение оболочки по умолчанию

Если вам нравится работать в оболочке fish , вы, вероятно, захотите включить некоторые настройки для формирования вашей среды.

Возможно, вы привыкли вносить поправки в файлы

/.bash_profile, но таких файлов в этой оболочке нет.

Чтобы настроить свои предпочтения, вы должны создать файл

/.config/fish/config.fish. Все конфигурационные файлы fish должны заканчиваться расширением .fish. Обычно путь

/.config/fish/ создается тогда, когда вы используете оболочку впервые.

Если вы хотите создать файл на основе образца, вы можете скопировать его из каталога fish:

Затем отредактируйте его:

Ознакомившись с файлом, вы можете удалить все параметры, которые вам не понадобятся.

Лучше не добавлять функции непосредственно в этот файл конфигурации. Вместо этого вы должны создать каталог functions в каталоге конфигураций fish:

Внутри этого каталога создайте файлы для каждой из функций. Каждый файл, который заканчивается на .fish, оболочка найдет и включит в свою среду. Каждая функция должна быть в собственном файле.

Например, можно создать файл, чтобы сделать функцию hello_sir доступной в каждой сессии.

Примечание: Прежде чем продолжить, не забудьте отключить псевдоним cat, который сделали ранее, с помощью set -e cat, если вы этого еще не сделали уже.

/.config/fish/functions/hello_sir.fish
function hello_sir
echo hello Mr. $argv[2] end

Введя end, нажмите CTRL-D, чтобы завершить ввод. Теперь функция будет доступна при каждой загрузке оболочки. Если вы хотите также добавить функцию say_hello, вам нужен отдельный файл.

Для вдохновения можно просмотреть функции по умолчанию:

После того как вы настроили свою оболочку по своему вкусу, вы можете использовать fish в качестве своей стандартной оболочки. Для этого нужно использовать команду chsh.

Во-первых, вам нужно знать путь к оболочке fish:

which fish
/usr/bin/fish

Затем можно изменить оболочку, набрав:

chsh -s /usr/bin/fish

Вам будет предложено подтвердить пароль. После этого при каждой загрузке системы вы будете получать доступ к командной строке fish.

Если вы хотите вернуться к другой оболочке, вы можете указать ее путь таким же образом:

Заключение

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

Fish - современная командная оболочка

Статьи

Первая версия датируется 2005 годом, казалось бы, прошло 15 лет, почему я назвал ее новой?

Название командой оболочкиПервый релиз
Bourne shell (sh)1977
C shell (csh)1978
Bourne again shell (bash)1989
Z shell (zsh)1990
Даты первых релизов популярных командных оболочек Unix/Linux

Особенности

  • История. Подсказывает команды из вашей истории выполнения так, как делает это веб-браузер.
  • Подсветка. Поддерживает подсветку синтаксиса, а так же автоматическое выявление ошибок ввода.
  • Автодополнение. Для автоматизации ввода опций и команд используют справочные man-руководства.
  • Скриптовый язык. Присутствует свой упрощённый язык написания сценариев.
  • Легко найти. Есть удобные средства поиска в истории выполненных команд.
  • Все активировано по умолчанию. После установки вам ничего не придется настраивать, все особенности оболочки работают из коробки.

Установка

Windows

Для MS Windows существует 3 варианта установки

Windows Subsystem for Linux

В подсистеме Linux для Windows мы делаем установку с помощью пакетного менеджера выбранного дистрибутива.

Cygwin

Во время установки необходимо поставить галочку в категории приложений Shell

MSYS2

Один из многих форков Cygwin, его основной плюс в интеграции пакетного менеджера ArchLinux. Для установки fish достаточно ввести команду pacman -S fish

Linux

Процесс установки в Linux практически идентичен, есть лишь два маленьких нюанса. Во-первых у большинства дистрибутивов свой пакетный менеджер, а во-вторых не во всех базовых репозиториях есть fish.

Fedora

ArchLinux

Gentoo

NixOS

Ubuntu, Debian, CentOS и openSUSE

MacOS

Отсутствием разнообразия установки для MacOS обвинить fish не получится, 4 разных способа на любой цвет и вкус 🙂

HomeBrew

MacPorts

Установочный пакет

Отдельное приложение

Запуск

Чтобы запустить оболочку введите команду fish в вашей консоли.

Настройки

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

Сделаем fish оболочкой по умолчанию для текущего пользователя.

Запуск веб-конфигуратора

Воспользуемся веб приложением для настройки fish

Перед нами откроется веб браузер с 7 вкладками, расскажу о каждой из них.

Как мы заметили оболочка быстро и легко настраивается под ваши предпочтения.

Дополнения

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

Менеджеры дополнений

Для установки, удаления и обновления дополнений в Fish существуют так называемые фреймворки. Рассмотрим самые популярные.

Fisher

Позволяет управлять функциями, дополнениями, биндингами и сниппетами из командной строки. Расширьте возможности своей оболочки изменив строчку приглашения

Установка Fisher
Управление плагинами

В фреймворке реализованна поддержка управления дополнениями с помощью команд

Установить

Удалить

Обновить

Отобразить список установленных плагинов

Более подробную информацию о работе фреймворка смотрите на странице разработчика.

Fundle

Минималистичный пакетный менеджер для Fish

Установка и обновление пакетов происходит и использованием git. Пакетный менеджер имеет полную совместимость с oh-my-fish плагинами.

Установка Fundle
Установка плагинов

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

Функции управления дополнениями легко запомнить

Полный список доступных команд

  • fundle init : Инициализация пакетного менеджера и загрузка всех доступных плагинов
  • fundle install : Установка всех плагинов
  • fundle update : Обновление всех плагинов
  • fundle plugin PLUGIN [--url PLUGIN_URL] [--path PATH] : Добавить плагин.
    • --url Указать URL для клонирования плагина.
    • --path Указать директорию установка

    Более подробную информацию о работе фреймворка смотрите на странице разработчика.

    Фреймворк для Fish. Создан для легкой организации и публикации коллекций из функций, утилит и тем.

    Tacklebox

    Установка Tacklebox
    Обновление

    Фреймворк создает в домашнем каталоге клон своего github репозитория

    Более подробную информацию о работе с фреймворком смотрите на странице разработчика.

    Oh My Fish

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

    Установка Oh My Fish

    Для установки достаточно запустить команду в терминале

    Доступные команды

    Oh My Fish включает в себя небольшую программу omf

    Более подробную информацию о работе с фреймворком смотрите на странице разработчика.

    Читайте также: