Jump to content

Рыба (оболочка Unix)

Рыба
Оригинальный автор(ы) Аксель Лильенкранц
Разработчик(и) Разработчики рыбьей ракушки [1]
Первоначальный выпуск 13 февраля 2005 г .; 19 лет назад ( 13 февраля 2005 г. )
Стабильная версия
3.7.1 [2]  Отредактируйте это в Викиданных / 19 марта 2024 г .; 4 месяца назад ( 19 марта 2024 г. )
Репозиторий
Написано в Ржавчина
Операционная система Unix-подобный
Тип оболочка Unix
Лицензия Только GPL-2.0 [3]
Веб-сайт рыбья ракушка

Fish (стилизовано строчными буквами) — это оболочка Unix , ориентированная на интерактивность и удобство использования. Fish спроектирован как многофункциональный, а не легко настраиваемый. [4] Fish считается экзотической оболочкой , поскольку она не соответствует стандартам оболочки POSIX по усмотрению ее сопровождающих. [5]

Основные моменты

[ редактировать ]

Fish имеет поиск по мере ввода автоматических предложений на основе истории и текущего каталога. Это работает как Bash Ctrl+ R поиск по истории, но всегда включен, обеспечивая пользователю постоянную обратную связь при написании командной строки. Пользователи могут выбирать предложения с помощью клавиш со стрелками или, как в Bash, нажимать Tab ↹ вместо этого для завершения табуляции. Заполнение с помощью табуляции обладает множеством функций и имеет расширяемые пути к файлам (с подстановочными знаками и скобками ), переменные и множество дополнений, специфичных для команд. команд Завершения, специфичные для команды, включая параметры с описаниями, которые в некоторой степени могут быть созданы на страницах руководства .

Создатель Fish предпочитал создавать функции в виде команд, а не синтаксиса. Это сделало функции обнаруживаемыми с помощью команд с опциями и справочных текстов. Функции также могут иметь удобочитаемое описание. Специальная команда справки пользователя предоставляет доступ ко всей документации по рыбам в веб-браузере . [6]

Синтаксис

[ редактировать ]

Синтаксис напоминает POSIX- совместимую оболочку (например, Bash), но во многом отличается от нее. [7]

# Variable assignment## Set the variable 'foo' to the value 'bar'. # Fish doesn't use the = operator, which is inherently whitespace sensitive. # The 'set' command extends to work with arrays, scoping, etc.> set foo bar> echo $foobar # Command substitution## Assign the output of the command 'pwd' into the variable 'wd'. # Fish doesn't use backticks (``), which can't be nested and may be confused with single quotes (' '). > set wd (pwd)> set wd $(pwd) # since version 3.4> echo $wd~# Array variables. 'A' becomes an array with 5 values:> set A 3 5 7 9 12# Array slicing. 'B' becomes the first two elements of 'A':> set B $A[1 2]> echo $B3 5# You can index with other arrays and even command # substitution output:> echo $A[(seq 3)]3 5 7# Erase the third and fifth elements of 'A'> set --erase A[$B]> echo $A3 5 9# for-loop, convert jpegs to pngs> for i in *.jpg      convert $i (basename $i .jpg).png  end# fish supports multi-line history and editing.# Semicolons work like newlines:> for i in *.jpg; convert $i (basename $i .jpg).png; end# while-loop, read lines /etc/passwd and output the fifth # colon-separated field from the file. This should be# the user description.> while read line      set arr (echo $line|tr : \n)      echo $arr[5]  end < /etc/passwd# String replacement (replacing all i by I)> string replace -a "i" "I" "Wikipedia"WIkIpedIa

Нет неявной подоболочки

[ редактировать ]

Некоторые языковые конструкции, такие как конвейеры , функции и циклы , были реализованы с использованием так называемых подоболочек в других языках оболочки . Подоболочки — это дочерние программы, которые запускают несколько команд оболочки и затем завершают работу. Эта деталь реализации обычно имеет побочный эффект: любые изменения состояния, сделанные в подоболочке, например назначение переменных, не распространяются на основную оболочку. Рыба никогда не отделяет так называемые подоболочки; все встроенные функции всегда полностью функциональны.

# This will not work in many other shells, since the 'read' builtin# will run in its own subshell. In Bash, the right side of the pipe# can't have any side effects. In ksh, the below command works, but# the left side can't have any side effects. In fish and zsh, both# sides can have side effects.> cat *.txt | read line

Пример назначения переменной

[ редактировать ]

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

found=''cat /etc/fstab | while read dev mnt rest; do  if test "$mnt" = "/"; then    found="$dev"  fidone

Обходной путь:

found=''while read dev mnt rest; do  if test "$mnt" = "/"; then    found="$dev"  fidone < /etc/fstab

Пример рыбы:

set found ''cat /etc/fstab | while read dev mnt rest  if test "$mnt" = "/"    set found $dev  endend

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

[ редактировать ]

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

# This will make emacs the default text editor. The '--universal' (or '-U') tells fish to# make this a universal variable.> set --universal EDITOR emacs# This command will make the current working directory part of the fish# prompt turn blue on all running fish instances.> set --universal fish_color_cwd blue

Другие особенности

[ редактировать ]

Таблица перевода Bash/fish

[ редактировать ]
Особенность Синтаксис Баша синтаксис рыбы Комментарий
переменное расширение:
с разделением слов и глобальной интерпретацией
$var

или

${var[@]}

или

${var[*]}
намеренно опущен Идентифицирован как основная причина ошибок в posix-совместимых языках оболочки. [8]
переменное расширение:
скаляр
"$var"
намеренно опущен Каждая переменная представляет собой массив
переменное расширение:
множество
"${var[@]}"
$var
Цитирование не обязательно для подавления разделения слов и интерпретации. Вместо этого цитирование означает сериализацию.
переменное расширение:
как строка, разделенная пробелами
"${var[*]}"
"$var"
редактировать строку в текстовом редакторе Ctrl+ X, Ctrl+ EAlt+ EПри вызове перемещает ввод строки в текстовый редактор.
оценить линейный ввод Ctrl+ Alt+ E[9] Оценивает выражения прямо в редакторе строк.
завершение истории Ctrl+ Rскрытый
подмена истории !! намеренно опущен Не обнаруживается
явная подоболочка
(expression)
fish -c expression
замена команды
"$(expression)" 

"$(expression)" или (expression | string collect)

замена процесса
<(expression)
(expression | psub)
Команда, а не синтаксис
логические операторы
!cmd && echo FAIL || echo OK
not commandand echo FAILor echo OK
присвоение переменной
var=value 
set var value
обработка строк:
заменять
"${HOME/alice/bob}"
string replace alice bob $HOME
обработка строк:
удалить шаблон префикса или суффикса, не жадно или жадно
var=a.b.c"${var#*.}"  #b.c"${var##*.}" #c"${var%.*}"  #a.b"${var%%.*}" #a
string replace --regex '.*?\.(.*)' '$1' a.b.c #b.cstring replace --regex '.*\.(.*)' '$1' a.b.c  #cstring replace --regex '(.*)\..*' '$1' a.b.c  #a.bstring replace --regex '(.*?)\..*' '$1' a.b.c #a
экспортировать переменную
export var 
set --export var 
Параметры, доступные через завершение вкладки
локальная переменная функции
local var
по умолчанию
локальная переменная области видимости нет эквивалента
set --local var
удалить переменную
unset var 
set --erase var 
проверьте, существует ли переменная
test -v var
set --query var
инициализация массива
var=( a b c ) 
set var a b c
Каждая переменная представляет собой массив
итерация массива
for i in "${var[@]}"; do  echo "$i"done
for i in $var  echo $iend
вектор аргумента:
все аргументы
"$@" 
$argv 
вектор аргумента:
индексирование
"$1" 
$argv[1] 
вектор аргумента:
длина
$#
(count $argv)
вектор аргумента:
сдвиг
shift
set --erase argv[1]
представление массива в переменных среды
PATH="$PATH:$HOME/.local/bin"
set PATH $PATH $HOME/.local/bin
fish принимает двоеточие в качестве разделителя массива для перевода переменных в среду и из нее. Это соответствует многим переменным среды, подобным массивам, таким как $PATH и $LS_COLORS.
экспортировать и запустить
LANG=C.UTF-8 python3 
env LANG=C.UTF-8 python3
env LANG=C.UTF-8 python3 работает в любой оболочке, поскольку env — это отдельная программа.
арифметика
$((10/3))
math '10/3'
expr 10 / 3 работает в любой оболочке, поскольку expr — это отдельная программа.
escape-последовательность
$'\e'
\e 
printf '\e' работает в обеих оболочках; их printf обе встроенные функции совместимы с GNU printf автономная программа. [10]
строка в одинарных кавычках:
escape-последовательности
'mom'\''s final backslash: \'
'mom\'s final backslash: \\'
Bash требует замены только самой одинарной кавычки в строках с одинарными кавычками, но длина замены составляет 4 символа. Та же замена работает и в fish, но fish поддерживает для этого обычную escape-последовательность, поэтому требует также экранирования обратной косой черты (за исключением того, что разрешены одинарные обратные косые черты, которые не предшествуют другой обратной косой черте или одинарной кавычке).

См. также

[ редактировать ]
  1. ^ «члены команды рыбных панцирей» . GitHub.com . Проверено 28 июля 2021 г.
  2. ^ «Выпуск 3.7.1» . 19 марта 2024 г. Проверено 22 марта 2024 г.
  3. ^ fishshell.com Лицензия на рыбу.
  4. ^ Лильенкранц, Аксель (17 мая 2005 г.). «Рыба — Удобная ракушка» . Еженедельные новости Linux . Проверено 24 марта 2010 г.
  5. ^ «Рыбная документация: дизайн» . Проверено 9 апреля 2021 г.
  6. ^ Linux.com . CLI Magic: Усиление оболочки рыбой. Проверено 24 марта 2010 г.
  7. ^ Пол, Райан (19 декабря 2005 г.). «Углубленный взгляд на рыбу: дружелюбная интерактивная раковина» . Арс Техника . Проверено 10 марта 2015 г. синтаксис Posix имеет несколько отсутствующих или плохо реализованных функций, включая область видимости переменных, массивы и функции. По этой причине fish отклоняется от синтаксиса Posix в нескольких важных местах.
  8. ^ «Ловушки Баша» . Проверено 10 июля 2016 г. На этой странице показаны распространенные ошибки, которые допускают программисты Bash. (…) Вы убережете себя от многих из этих ловушек, если просто всегда будете использовать кавычки и никогда ни по какой причине не будете использовать разделение слов! Разделение слов — это сломанная устаревшая функция, унаследованная от оболочки Bourne, которая остается включенной по умолчанию, если вы не указываете расширения. Подавляющее большинство ошибок так или иначе связано с расширениями без кавычек и последующим разделением и подстановкой слов в результате.
  9. ^ «RFC: добавить привязку для раскрытия/оценки токенов в командной строке» . Гитхаб . 16 мая 2013 г. Проверено 9 апреля 2021 г.
  10. ^ «printf не поддерживает \e» . проблемы с рыбой . 11 июля 2013 г. Проверено 24 марта 2016 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4d11d11b93a4e71bba5b1d138bb00b75__1722754860
URL1:https://arc.ask3.ru/arc/aa/4d/75/4d11d11b93a4e71bba5b1d138bb00b75.html
Заголовок, (Title) документа по адресу, URL1:
Fish (Unix shell) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)