Введение

[источник]


Содержание:


Это документация по fish - дружественной интерактивной оболочке (friendly interactive shell)

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

В отличие от других оболочек, fish не поддерживает стандарт POSIX, но все еще использует примерно такую же модель.

Некоторые из ключевых особенностей fish:

Эта страница дает обзор возможностей, синтаксиса и интерфейса fish. Если вы впервые используете fish - посмотрите [урок].

Если вы уже знакомы с другими оболочками наподобие bash и хотите увидеть различия сценариев, смотрите [Fish для пользователей Bash].

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

Этот раздел расскажет о том, как устанавликать, удалять, запускать и останавливать оболочку fish. Так же указано как сделать fish оболчкой по-умолчанию.

Установка

Up-to-date instructions for installing the latest version of fish are on the fish homepage.

To install the development version of fish, see the instructions on the project's GitHub page.

Запуск и выход

После установки fish, запустите терминал. Если fish не является оболочкой по-умлочанию:

Использование Bash

Если у вас fish уже установлен в качестве оболочки по-умолчанию и вы хотите скопировать команды из интернета, которые написаны для bash (оболочка по-умолчанию в большинстве систем), вы можете пойти одним из двух путей:

Оболочка по-умолчанию

Для того, что бы сделать fish оболочкой по-умолчанию, необходимо:

Более подробно см. [Переход на fish].

Удаление

Для удаления fish: см. [FAQ: Удаление fish].

Строка Shebang

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

Скрипт, написанный для bash должен в первой строку иметь:

#!/bin/bash

Когда оболочка сообщит ядру о выполнении файла, он будет использовать интерпритатор /bin/bash.

Для скриптов, написанных на других языках, необходимо заменить /bin/bash на соответствующий языку интерпритатор (например: /usr/bin/python для python или /usr/local/bin/fish для скриптов fish)

Эта строка нужна только когда скрипты выполняются без прямого вызова интерпритатора. Для функций внутри fish, или когда выполняется скрипт с помошью fish /path/to/script, sheabang не нужен (но это не точно!)

Обзор синтаксиса

Оболочки наподобие fish используются, передавая им команды. Каждая команда fish поддерживает тот же базовый синтаксис. Команда выполняется после введения названия команды, за которым следуют любые аргументы. Например:

echo hello world

Это вызов команды echo. echo выводи свои аргументы на экран. В примере будет выведено hello world. В fish все делается с использованием команд. Есть команды для повторения других команд, команды для определения переменных, команды для выполнения группы команд, как одной команды, и т.д. Все эти команды поддерживают тот же базовый синтаксис.

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

Каждая программа на вашем компьютере может быть использована в качестве команды fish. Если файл программы расположен в одном из каталогов переменной PATH, вы можете просто ввести название программы для ее запуска. В другом случае необходимо включить в название программы путь до нее (например /home/me/code/checkers/checkers или ../checkers)

Вот список некоторых полезных команд:

Команда Описание
cd Изменить текущий каталог
ls Список файлов и каталогов
man Отобразить страницу мануала
mv Переместить (переименовать) файлы
cp Копировать файлы
open Открыть файлы приложением, ассоциированным с ними приложением
less Отобразить содержимое файлов

Команды и аргументы разделяются символом пробела " ". Каждая каманда заканчивается с введением новой строки (при нажатии клавиши Enter) или точки с запятой ";". Множественные команды могут быть записаны в одну строку, разделяемые так же символом точки с запятой.

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

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

Терминология

Здесь мы определим некоторые термины, используемые на этой странице и на протяжении всей остальной части документации fish:

Термин (рус) Термин (ориг) Определение
Аргумент Argument Параметр, передаваемый команде
Команда Command Программа, которая может быть запущена оболочкой, или более смпециализированная внешняя программа, которая может быть запущена оболочкой в другом процессе
Встроенная команда Builtin Команда, которая реализована в оболочке. Встроенные команды настолько тесно привязаны к работе оболочки, что невозможно реализовать их как внешние команды
Функция Function Блок команд, который может быть вызван как единая команда. Используя функции, можно соединить несколько простых команд в одну более продвинутую команду.
Конвейер Pipeline Набор команд, соединенных таким образом, что вывод одной команды является вводом для следующей
Задание Job Запуск конвейера или команды
Перенаправление Redirection Операция, которая меняет один из входных или выходных потоков, связанных с заданием.
Переключатель или Опция Switch or Option Особый вид аргумента, который изменяет поведение команды. Переключатели почти всегда начинается с одной или двух дефисов.

Кавычки

Иногда функции, такие как расширение параметров и символов, указываются на пути. Для этого вы можете использовать кавычки, такие как одинарные (апостроф) ' или двойные кавычки ". Между одинарными кавычками fish не выполняет вычислений. Между двойными кавычками fish выполняет только подстановку переменных. Никакого другого вида вычисления (включая вычисление расширения параметра или параметра расширения) не поддерживаются; так же игнорируются и экранированные последовательности (например, \n). Внутри кавычек пробел в качестве разделителя аргументов игнорируется, что позволяет аргументам, обернутых в кавычки, содержать пробелы.

В строках с одинарными кавычками значимыми последовательностями являются:

Последовательность Описание
\' экранирует одинарную кавычку
\\ экранирует двойной обратный слэш

В строках с двойными кавычками значимыми последовательностями являются:

Последовательность Описание
\" экранирует двойную кавычку
\$ экранирует знак доллара
\ обеспечивающий новую строку и удаляется вместе с символом новой строки
\\ экранирует двойной обратный слэш

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

Пример:

Команда Описание
rm "cumbersome filename.txt" удалит один файл "cumbersome filename.txt"
rm cumbersome filename.txt удалит два файла "cumbersome" и `"filename

Другой пример:

grep 'enabled)$' foo.txt

найдер строки, оканчивающиеся подстрокой "enabled)" в файле foo.txt (здесь $ - специальный символ команды grep, обозначающий совпадение с окончанием строки)

Экранированные символы

Некоторые символы не могут быть выведены обычным способом в командной строке. Для таких символов существуют общепринятые обозначения:

Обозначение Описание
\a символ оповещения
\e символ экранирования
\f символ подачи формы
\n символ новой строки
\r символ возврата каретки
\t символ табуляции
\v символ вертикальной табуляции
\xHH здесь HH - шестнадцатеричное число; обозначает символ ASCII с указанным значением. Например, \x9 - символ табуляции
\ХHH здесь HH - шестнадцатеричное число; обозначает байт данных с указанным значением. Если вы используете мультибайтовую кодировку, это может быть использовано для ввода некорректных строк. Используйте только если вы хорошо представляете, что именно вы делаете!
\ooo здесь ooo - восьмеричное число; обозначает символ ASCII с указанным значением. Например, \011 - символ табуляции
\uXXXX здесь XXXX - шестнадцатеричное число; обозначает 16-битный символ Unicode с указанным значением. Например, \u9 - символ табуляции
\UXXXXXXXX здесь XXXXXXXX - шестнадцатеричное число; обозначает 32-битный символ Unicode с указанным значением. Например, \u9 - символ табуляции
\cX здесь X - буква алфавита; контрольная последовательность, генерируемая нажатием клавиши управления и указанной буквы. Например \ci - символ табуляции

Некоторые символы имеют специально значение в оболочке. Например, апостроф ' отключает вычисление в строке (см. Кавычки). Что бы сообщить оболочке о том, что необходимо прочесть жти символы буквально, необходимо их экранировать с помощью обратного слеша. Например команда:

echo \'hello world\'

выведет 'hello world' (включая апострофы), тогда как команда outputs 'hello world' (including the apostrophes), while the command:

echo 'hello world'

выведет hello world (без апострофов). В первом случае оболочка обрабатывает апострофы буквально как символы, в то время как в последнем случае он относится к ним как к специальным модификаторам вычисления.

Специальный символы и экранированные последовательности:

Последовательность Описание
\ (обратный слэш с пробелом) экранирует символ пробела.
\$ экранирует символ доллара.
\\ экранирует символ обратного слэша.
\* экранирует символ звёздочки.
\? экранирует символ вопросительного знака (Это не нужно, если флаг функции qmark-noglob включен).
\~ экранирует символ тильды.
\# экранирует символ решетки.
\( экранирует символ левой скобки.
\) экранирует символ правой скобки.
\{ экранирует символ левой фигурной скобки.
\} экранирует символ правой фигурной скобки.
\[ экранирует символ левой квадартной скобки.
\] экранирует символ правой квадратной скобки.
\< экранирует символ "меньше".
\> экранирует символ "больше".
\^ экранирует символ карет (циркумфлекс).
\& экранирует символ амперсанд.
\| экранирует символ вертикальной линии.
\; экранирует символ точки с запятой.
\" экранирует символ двойной кавычки.
\' экранирует символ одинарной кавычки.

Перенаправление ввода/вывода

Большинство программ использует три основных потока ввода/вывода (I/O):

Каждый поток имеет число, называемое файовым дескриптором (FD): 0 для stdin, 1 для stdout и 2 для stderr.

Назначение потока может быть изменено с импользованием перенаправления. Например, echo hello > output.txt перенаправит стандартный вывод команды echo в текстовый файл.

В качестве назначения поддерживается:

В качестве удобства, перенаправление &> может быть использовано для одновременного направления в stdout и stderr в качестве назначения. Например, echo hello &> all_output.txt перенаправит оба потока stdout и stderr в файл all_output.txt. Это эквивалентно echo hello > all_output.txt 2>&1

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

Например, echo hello 2> output.stderr запишет стандартный поток ошибок (файловый дескриптор 2) в output.stderr.

1: Предыдущая версия fish так же поддерживала спецификацию ^НАЗНАЧЕНИЕ, но это порадило еще один особенный символ, поэтому он был признан устаревшим и будет удален в будущем. См.раздел флаги функций.

Конвейеризация (Piping)

Другой путь для перенаправления потоков - конвейер. Конвейер соединяет потоки друг с другом. Обычно, стандартный вывод одной команды соединяется со стандартным вводом другой. Это записывается как команды, разделенные символом ковейера |. Например:

cat foo.txt | head

Команда cat foo.txt вернет содержимое файла foo.txt в поток стандартного вывода. Этот вывод будет перенаправлен во ввод программе head, которая печатает первые десять строк, поданных на ввод.

Можно передать на конвейер дескриптор другого выходного файла, добавляя его номер FD и символ вывода перенаправления на конвейер. Например:

make fish 2>| less

будет пытаться собрать fish, и любые ошибки будут показаны, используя постраничный просмотрщик less.2

В качестве соглашения, конвейер &| перенаправляет оба потока и stdout и stderr в один процесс. Обратите внимание, что это отличается от bash, где используется |&.

2: "Постраничный просмотрщик" - это программа, которая получает вывод и делит его на страницы. less не создает страницы, он позволяет произвольно скролить полученный текст (в обе стороны!)

Контроль заданий

Когда вы начинаете задание в fish, при этом fish будет остановлен и передаст контроль над терминалом только что запущенной программе. Иногда, вам может понадобиться использовать командную строку, и иметь запущенным задание в фоне. Для создания фонового задания добавьте вконце амперсанд & к вашей команде. Это сообщит оболочке запустить задание в фоне. Фоновые задания очень полезны при запуске программ с графическим интерфейсом пользователя.

Например:

emacs &

запустит текстовый редактор emacs в фоне. Команда fg может быть использована для переноса программы на передний план, когда в этом появится необходимость.

Большинство программ прерывают свое выполненеие и возвращают контроль fish при нажатии Cntrl+Z (обозначается сокращением ^Z). Вернувшись обратно в командную строку fish, вы можете запустить другие программы и делать все, что хотите. Если хотите, вы можете вернуть в приостановленную команду с помощью команды fg (foreground - передний план).

Если вместо этого вы хотите перевести приостановленную задачу в фоновый режим, используйте команду bg.

Чтобы получить список всех запущенных задач, используйте команду jobs. Эти задания могут быть удалены с помощью команды disown.

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

Функции

Функции - программы, написанные на языке fish. Фнукция объединяет различные команды и их аргументы, используя одно имя.

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

function ll
    ls -l $argv
end

В первой строке определяется название функции ll, которое можно использовать для простого ввода ll в командной строке. Во второй строке сообщается fish команда ls -l $argv, которая будет вызвана, когда будет введено ll. $argv - переменная-список, которая всегда содержит все аргументы, переданные функции. Например здесь все аргументы передаются команде ls. end в третьей строке завершает определение функции.

Вызов ll /tmp/ запустит команду ls -l /tmp/, которая выведит все содержимое каталога /tmp.

Это своего рода функция, известная как обертка или «псевдоним».

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

function fish_prompt
    # Простое приглашение ввода. Отображает текущий каталог
    # (когда fish хранит в переменной $PWD)
    # и использует символ '►' для обычного пользователя и '#' для root.
    set -l user_char '►'
    if fish_is_root_user
        set user_char '#'
    end

    echo (set_color yellow)$PWD (set_color purple)$user_char
end

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

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

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


Последнее обновление: 2021-07-13 17:50:13