[источник]
Содержание:
Это документация по fish - дружественной интерактивной оболочке (friendly interactive shell)
Оболочка - программа, которая помогает выполнять на вашем компьютере другие программы. fish предлагает интерфейс командной строки сфокусированный на простоте и интерактивности использования.
В отличие от других оболочек, fish не поддерживает стандарт POSIX, но все еще использует примерно такую же модель.
Некоторые из ключевых особенностей fish:
Обширный UI: [Подсветка синтаксиса], [автодополнение], [завершение tab]
и выделение списков с поддержкой навигации и фильтрации.
Не требует настройки: 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 не является оболочкой по-умлочанию:
введите fish для начала работы с fish:
> fish
введите exit для выхода из fish:
> exit
Если у вас fish уже установлен в качестве оболочки по-умолчанию и вы хотите скопировать команды из интернета, которые написаны для bash (оболочка по-умолчанию в большинстве систем), вы можете пойти одним из двух путей:
Использовать команды bash с параметром -c, который позволяет считывать команды
из строки:
> bash -c 'some bash command'
Использовать оболочку bash, явно запустив ее и выйдя из нее после выполнения команд:
> bash
$ some bash command
$ exit
> _
Для того, что бы сделать fish оболочкой по-умолчанию, необходимо:
/usr/local/bin/fish в файл /etc/shells.chsh -s /usr/local/bin/fish.Более подробно см. [Переход на fish].
Для удаления fish: см. [FAQ: Удаление fish].
Так как скрипты оболочки могут быть написаны на разных языках, они должны нести информацию о том, какой интерпритатор должен использоваться для их запуска. Поэтому, ожидается, что они будут иметь в первой строку т.н. строку 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 в текстовый
файл.
команда <ФАЙЛ_ИСТОЧНИКкоманда >ФАЙЛ_НАЗНАЧЕНИЯ
1
команда 2>ФАЙЛ_НАЗНАЧЕНИЯкоманда >>ФАЙЛ_НАЗНАЧЕНИЯ
команда 2>>ФАЙЛ_НАЗНАЧЕНИЯ
>?ФАЙЛ_НАЗНАЧЕНИЯ или 2>?ФАЙЛ_НАЗНАЧЕНИЯ. Это известно как
"незабивающее"/"noclobber" перенаправление.
В качестве назначения поддерживается:
>/dev/null для тихой
записи вывода в специальный "выгребной" файл.&) поддерживает номера других файловых дескрипторов (например
&2 для стандартного потока ошибок). Вывод будет записан в дескриптор назначения.
&-). Файловый дескриптов будет закрыт.В качестве удобства, перенаправление &> может быть использовано для одновременного
направления в stdout и stderr в качестве назначения. Например,
echo hello &> all_output.txt перенаправит оба потока stdout
и stderr в файл all_output.txt. Это эквивалентно
echo hello > all_output.txt 2>&1
Любой произвольный файловый дескриптор может быть использован для перенаправления, если указать его номер в качестве префикса перенаправления:
N, используйте
команда N<ФАЙЛ_ИСТОЧНИК
N, используйте команда N>ФАЙЛ_НАЗНАЧЕНИЯ
N содержимым вывода, используйте
команда N>>ФАЙЛ_НАЗНАЧЕНИЯ
Например, echo hello 2> output.stderr запишет стандартный поток ошибок (файловый дескриптор
2) в
output.stderr.
1↑: Предыдущая версия fish так же
поддерживала спецификацию ^НАЗНАЧЕНИЕ, но это порадило еще один особенный символ, поэтому он
был признан устаревшим и будет удален в будущем. См.раздел флаги функций.
Другой путь для перенаправления потоков - конвейер. Конвейер соединяет потоки друг с другом. Обычно,
стандартный вывод одной команды соединяется со стандартным вводом другой. Это записывается как команды,
разделенные символом ковейера |. Например:
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