<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF123%3AFish</id>
		<title>LXF123:Fish - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF123%3AFish"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF123:Fish&amp;action=history"/>
		<updated>2026-05-13T13:05:35Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF123:Fish&amp;diff=10808&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF123:Fish&amp;diff=10808&amp;oldid=prev"/>
				<updated>2010-09-28T05:36:38Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==''Fish'': Обитатель темных глубин==&lt;br /&gt;
&lt;br /&gt;
Дружественный командный интерпретатор ''Fish'' обычно теряется в тени гигантов ''Bash'' и ''Zsh'', и многие считают его просто игрушкой для новичков. Так ли это, разбирается '''Евгений Зобнин'''.&lt;br /&gt;
&lt;br /&gt;
Прошли те времена, когда Linux пользовались только матерые программисты и технически подкованные специалисты. Сегодняшний пользователь Linux – это обычно перебежчик с Windows, человек, пожелавший получить свободу выбора и комфорт. Он может ничего не понимать в драйверах, командной строке и протоколах TCP/IP, ему просто нужна операционная система, которая не будет навязывать свои условия и думать, что она умнее его.&lt;br /&gt;
&lt;br /&gt;
И вот, освоившись в новой для себя среде, пользователь начинает задумываться о более производительных приемах работы и все чаще поглядывает в сторону незамысловатой программы «Терминал», в небольшом безликом окошке которой скрыта настоящая мощь Unix-систем – командный интерпретатор.&lt;br /&gt;
&lt;br /&gt;
===Блеск и нищета терминала===&lt;br /&gt;
&lt;br /&gt;
Интерпретатор команд(в просторечии «шелл» или «оболочка») всегда был инструментом профессионалов – людей, понимающих тонкости устройства Unix-подобных операционных систем и способных использовать их возможности для достижения нужных результатов. Для новичка же работа в терминале сродни прогулке&lt;br /&gt;
в густом неизведанном лесу в ночное время суток: непонятно, к чему приведет следующий шаг и куда в конце концов попадешь.&lt;br /&gt;
&lt;br /&gt;
Решить проблемы новичков, впервые увидевших командный интерпретатор, пытались многие программисты. Одни объединяли идеи графических интерфейсов и командного окна, другие создавали многочисленные обертки для команд, призванные облегчить их использование, но только Аксель Лильенкранц [Axel Liljencrantz], решившийся переосмыслить самую суть командного интерпретатора, смог дать пользователям действительно удобный и простой в освоении инструмент.&lt;br /&gt;
&lt;br /&gt;
===Почем рыба?===&lt;br /&gt;
&lt;br /&gt;
Вышедший из под пера Лильенкранца командный интерпретатор ''Fish'' (Friendly Interactive SHell – Дружественная интерактивная оболочка), дословный перевод названия которого означает не что иное как «рыба», вобрал в себя все лучшее от своих предшественников, не унаследовав, однако, анахронизмов и неправильных и сложных, по мнению автора, черт.&lt;br /&gt;
&lt;br /&gt;
''Fish'' (http://www.fishshell.org) принято считать инструментом новичков, идеальным перевалочным пунктом на пути к более сложным ''Bash'' и ''Zsh''. На самом деле это не совсем так: простота использования ''Fish'' заключена не в «рюшечках» или помощниках, просто «прикрученных сбоку», как это сделано в других «дружелюбных оболочках», и даже не в чрезмерном его упрощении, а в наглядности и логичности. Возможности ''Fish'' отнюдь не уступают повсеместно распространенному ''Bash'', что не мешает ему быть гораздо более простым и наглядным в использовании.&lt;br /&gt;
&lt;br /&gt;
Вот неполный список тех особенностей, которые делают ''Fish'' действительно удобным и простым:&lt;br /&gt;
* Подсветка синтаксиса.&lt;br /&gt;
* Расширенный механизм автодополнений, который, кроме возможных вариантов, выводит на экран массу полезной информации.&lt;br /&gt;
* Переработанный командный язык, более простой и ясный.&lt;br /&gt;
* Информативные сообщения об ошибках, в которых объясняется, как пользователь может исправить ситуацию.&lt;br /&gt;
* Встроенная команда ''help'' для отображения справки в окне браузера.&lt;br /&gt;
* Команда ''open'', открывающая файл в приложении по умолчанию.&lt;br /&gt;
* Возможность перехода к другому каталогу без использования команды ''cd''.&lt;br /&gt;
* Умный механизм перемещения по каталогам.&lt;br /&gt;
&lt;br /&gt;
===Просто попробуйте===&lt;br /&gt;
&lt;br /&gt;
Пользователи ''Vim'' и других развитых текстовых редакторов привыкли к подсветке синтаксиса языков программирования. Она улучшает читаемость кода, выделяя важные части и затемняя несущественные. ''Fish'' использует схожую идею, добавляя к ней щепотку интерактивности. Например, запустите ''Fish'' (предварительно, разумеется, установив его через менеджер пакетов) и наберите команду ''grap'':&lt;br /&gt;
&lt;br /&gt;
 $ fish&lt;br /&gt;
 $ grap&lt;br /&gt;
&lt;br /&gt;
Как видите, она отобразилась в красном цвете. Это отнюдь не особое чувство стиля создателя ''Fish'', а сигнал, призванный известить пользователя о неправильно набранной команде. Исправьте имя на ''grep'', и вы увидите, что цвет изменился на зеленый.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF123_30_1.jpg|300px]] По нажатию на клавишу '''Tab''' ''Fish'' печатает не только доступные флаги, но и их описание|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Теперь введите команду ''ls'', но не запускайте ее на исполнение, а нажмите клавишу '''Tab'''. Чувствуете разницу? Автодополнение гораздо более многословно, чем в ''Bash'' или ''Zsh''. Список возможных вариантов не только подсвечивается, но и включает в себя краткое описание. Добавьте к введенной команде пробел и вновь нажмите '''Tab'''. Вуаля – список файлов включает имена, типы и размеры. Укажите после пробела знак ‘'''-'''’, и снова '''Tab'''. Это перечень ключей, которые принимает команда, с кратким описанием каждого из них (встроенная функциональность, для получения которой в ''Bash'' придется устанавливать пакет ''bash-completition'').&lt;br /&gt;
&lt;br /&gt;
Чувствуете, как скрупулезно ''Fish'' обрабатывает информацию перед выводом на экран? Но это далеко не все. Командный интерпретатор подчеркивает правильные пути к файлам, оставляя неизменными ошибочные, а регулярные выражения выделяет синим цветом. Нажатие '''Tab''' после команды ''man'' приводит к выводу списка разделов ''man'' с описанием; краткая информация выводится также и для каждой man-страницы. Автодополнение действует даже на строки, содержащие символы сопоставления с образцом, такие как '''*''' и '''?'''. Командный интерпретатор будет применять программу-пейджер (''less'' или то, что указано в переменной '''$PAGER''') каждый раз, когда выводимый список не умещается на экран.&lt;br /&gt;
&lt;br /&gt;
Перейдите на несколько уровней директорий ниже – и вы заметите, как ''Fish'' сокращает длинный путь к текущему каталогу за счет усечения имен предыдущих. Наберите команду ''prevd'', и вы попадете туда, где были до выполнения команды ''cd''. Все посещенные вами каталоги сохраняются в стеке, так что вы можете использовать команды ''prevd'' и ''nextd'' для навигации по ним. Просто попробуйте, и все поймете (подобный механизм есть и в других интерпретаторах; правда, реализуется он с помощью команд ''pushd'' и ''popd'' и не распространяется на команду ''cd''). Вы вольны не использовать команду ''cd'' вообще, набирая просто имена каталогов.&lt;br /&gt;
&lt;br /&gt;
===Полезные мелочи===&lt;br /&gt;
&lt;br /&gt;
Как и в других командных интерпретаторах, клавиши '''Вверх''' и '''Вниз''' служат для навигации по истории. Но ''Fish'' идет еще дальше: он удаляет из истории все дублирующиеся команды и позволяет производить поиск по первым символам. Просто наберите '''l''' и нажмите клавишу '''Вверх'''. Скорее всего, вы увидите команду ''ls'' (справедливости ради следует сказать, что ''Zsh'' в этом плане ничуть не менее удобен, но требует дополнительной настройки для включения нужной функциональности).&lt;br /&gt;
&lt;br /&gt;
Не помните, какой программой следует открывать определенный тип файлов? Доверьте выбор ''Fish'', набрав что-то вроде ''open file.djvu'', и он найдет нужную программу в базе MIME-типов (используемой, в частности, средами Gnome и KDE) и запустит ее на исполнение. А для копирования и вырезания строк в буфер обмена ''X Window'' используйте сочетания клавиш '''Ctrl+Y''' и '''Ctrl+K'''.&lt;br /&gt;
&lt;br /&gt;
Командный интерпретатор поставляется с отличной документацией, для навигации по которой следует использовать команду ''help''. Она автоматически открывает локальную копию справочника в web-браузере по умолчанию. Для доступа к нужной секции просто напишите ее имя в качестве аргумента (например, ''help alias'' или ''help syntax''). Заметьте, что автодополнение сработает и в этом случае.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF123_31_1.jpg|300px]] Зачем вам ''ls'', если ''Fish'' может генерировать такие листинги?|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
===Легкий скриптинг===&lt;br /&gt;
&lt;br /&gt;
Как уже отмечалось, интерпретатор ''Fish'' включает переработанный командный язык, который стал гораздо более наглядным и простым в освоении. Просто сравните два скрипта:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
 ejectcd() {&lt;br /&gt;
   cdrom=”/cdrom”&lt;br /&gt;
   lsof $cdrom&lt;br /&gt;
   if [ $? -ne 0 ]; then&lt;br /&gt;
      eject $cdrom&lt;br /&gt;
   fi&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
 function ejectcd&lt;br /&gt;
   set cdrom “/cdrom”&lt;br /&gt;
   lsof $cdrom&lt;br /&gt;
   if [ $? -ne 0 ]&lt;br /&gt;
     eject $cdrom&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первый написан на командном языке POSIX ''sh'', который используется в любой современной Unix-оболочке, второй – на языке ''Fish''. Давайте сравним основные управляющие структуры этих языков:&lt;br /&gt;
&lt;br /&gt;
'''POSIX'''&lt;br /&gt;
* Условный оператор: '''if true; then echo hello; fi'''&lt;br /&gt;
* Цикл: '''for i in a b c; do echo $i; done'''&lt;br /&gt;
* Case-оператор: '''case $you in *) echo hi;; esac'''&lt;br /&gt;
* Функция: '''hi () { echo hello; }'''&lt;br /&gt;
&lt;br /&gt;
'''''FISH'''''&lt;br /&gt;
* Условный оператор: '''if true; echo hello; end'''&lt;br /&gt;
* Цикл: '''for i in a b c; echo $i; end'''&lt;br /&gt;
* Case-оператор: '''switch $you; case ‘*’; echo hi; end'''&lt;br /&gt;
* Функция: '''function hi; echo hello; end'''&lt;br /&gt;
&lt;br /&gt;
Чувствуете разницу? Никаких '''if...fi, do...done''', непонятных скобок в объявлении функции – все просто, логично и единообразно. Командный язык ''Fish'' очень логичен и чист; это касается не только ключевых слов, операторов и структур управления, но и, например, способа перенаправления вывода:&lt;br /&gt;
&lt;br /&gt;
 bash$ ls &amp;gt;список_файлов.txt 2&amp;gt;ошибки.txt&lt;br /&gt;
&lt;br /&gt;
в ''Bash'' и&lt;br /&gt;
&lt;br /&gt;
 fish$ ls &amp;gt;список_файлов.txt ^ошибки.txt&lt;br /&gt;
&lt;br /&gt;
Это идентичные команды, перенаправлющие вывод ''ls'' в файл '''список_файлов.txt''', а ошибки – в '''ошибки.txt'''. Первая правильно отработает в ''Bash'' и ''Zsh'', вторая – в ''Fish''.&lt;br /&gt;
&lt;br /&gt;
Для подстановки вывода команд используется единственная форма '''(команда)''' вместо двух различных вариантов ('''`команда`''' и '''$(команда)''') в POSIX ''sh''. Переменные устанавливаются и удаляются с помощью команды '''set''', запуск которой без аргументов приводит к распечатке всех существующих переменных и их значений. Аналогичные команды существуют и для определения и получения списка функций.&lt;br /&gt;
&lt;br /&gt;
Интересная особенность командного языка ''Fish'' – наличие так называемых «универсальных переменных», определяемых с помощью команды&lt;br /&gt;
&lt;br /&gt;
 set -U переменная значение&lt;br /&gt;
&lt;br /&gt;
Универсальные переменные становятся видны всем экземплярам ''Fish'', работающим на данном ПК, и позволяют обмениваться информацией между оболочками.&lt;br /&gt;
&lt;br /&gt;
===Ну как, понравилось?===&lt;br /&gt;
&lt;br /&gt;
Вопреки расхожему мнению, ''Fish'' – не игрушка, а мощный, удобный и лишенный противоречий командный интерпретатор. Он прост, но функционален; логичен и не примитивен. В отличие от своих предшественников, ''Fish'' не обременен тяжелым грузом функциональности, что не мешает ему быть более удобным и эффективным в использовании. И если вы готовы платить за все его удобства несовместимостью синтаксиса (а это подразумевает невозможность выполнять стандартные сценарии оболочки, если у вас отсутствует ''Bash'' или аналогичный интерпретатор) – вперед: устанавливайте, пробуйте, познавайте. '''LXF'''&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>