Rambler's Top100 Service калинин.ru / комментарии / по /  << 22.09.00 >>

Командный интерпретатор bash

Текст ниже предназначен для тех людей, которые по принципиальным соображениям не пользуются командной строкой, мотивируя это тем, что им там работать "неудобно". Соотвественно, я не собираюсь здесь расписывать преимущества bash над csh, просто хочется на его примере (или, точнее, рядом с его примером ;) ) показать то, что уметь использовать командную строку очень полезно.

Вообще говоря, приглашение любого интерпретатора команд у современного пользователя чаще всего вызывает чувство неловкости. Прежде всего потому, что непонятно куда надо "ткнуть" (или "кликнуть") мышкой; кроме того, вообще непонятно, что надо делать. Нигде не выводятся подсказки, не появляются различные рожицы "скрепок" и "собачек" с сообщениями, призванными помочь человеку сделать то, что он хочет... Ничего этого нет. Только мигающий курсор, показывающий текущее место ввода.

И, тем не менее, командная строка является одним из самых удобных инструментов (хотя и не каждая: стандартный интерпретатор Windows NT под названием cmd.exe удобством не отличается и вообще не совсем понятно, зачем нужен). Я уже развивал различные "теории" про удобство пользовательского интерфейса в своем комментарии к текстовому редактору Emacs, но здесь самое место повторить основные положения вновь.

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

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

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

Вообще, WYSIWYG является концепцией порочной в принципе. Потому она поощряет человека не думать перед выполнением работы.

Но так я уж слишком далеко уйду от темы. Итак, bash является командным интерпретатором, т.е. он позволяет выполнять некоторые команды. Самая частая задача, которая исполняется при его помощи, это "запустить программу". Кстати сказать, для людей, знакомых только с command.com и cmd.exe, будет несколько удивительно, наверно, что в отличии от них, в bash отсутствуют внутренние комманды для, например, распечатки содержимого каталога. Т.е., в command.com команда dir не запускала внешней программы dir.exe или dir.com (как это было бы логично ожидать), а заставляла командный интерпретатор распечатать содержимое текущего каталога. В то же самое время, ls является аналогичной программой, используемой для этой цели (в среде Unix она обычно располагается в /bin/ls).

Командный интерпретатор всегда интерпретирует какую-то последовательность команд, по-умолчанию поступающаю со стандартного файла ввода (stdin). Таким образом, можно запросто автоматизировать выполнение различных рутинных операций просто записав необходимую последовательность команд в файл и запуская командный интерпретатор на него. Впрочем, это понятно и так --- аналогом в command.com являются файлы с расширением .bat. Bash в данном случае характеризуется более расширенными возможностями самого интерпретируемого языка. В качестве примера скажу, что два года назад один студент защищал курсовой проект, в котором он реализовал объектно-ориентированную модель программирования в скриптах для bash.

Сама командная строка (в том случае, когда команды поступают со стандартного файла ввода) в bash, пожалуй, одна из самых комфортных. Очень удобна реализованная технология завершения имен, которая позволяет в том месте, где требуется подставить имя файла или каталога, набрать несколько первых букв и "попросить" bash завершить имя до конца. Кроме того, командный интерпретатор позволяет перенаправлять потоки данных из одной программы в другую (программные каналы) или подставить в качестве параметра результат выполнения другой программы. Это позволяет комбинировать выполнение программы практически любым образом.

В Unix есть обширный набор маленьких программ, которые позволяют выполнять большинство операций с файлами. Так как все они придерживаются одной идеологии: пользуются стандартным вводом и стандартным выводом, позволяют задать параметры выполнения в коммандной строке, то это позволяет при помощи bash комбинировать их использование для достижения практически любой цели при помощи одной строки (в смысле, один раз нажать enter).

Можно много спорить об удобстве этого подхода (расписывать здесь примеры команд мне не хочется), но могу привести себя в пример. Работая в операционной системе семейства Windows я обычно использую FAR в качестве оболочки (bash, к сожалению, до сих пор не является "целиком" родным для Windows), а при работе в Unix (любом) --- bash (кстати, в последнее время большую часть времени за компьютером я провожу работая именно в Unix). И это несмотря на то, что для Unix есть свой собственный клон Norton Commander'а --- Midnight Commander. Просто действительно получается так, что все операции с файлами для меня быстрее выполнить набрав что-нибудь в коммандной строке.

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

Но некоторые преимущества (кроме перечисленных выше) у bash есть. Освоив его вы сможете одинаково эффективно работать с файлами в любой операционной системе, где он есть, а таких немало. Кроме того, вы сможете работать на удаленной машине по сети, потому что идеология работы с файлами ввода и вывода очень просто позволяет передавать команды, набираемые пользователем, по сети и возвращать реакцию компьютера (например, используя telnet). Не спорю, можно использовать X-протокол и работать с графическим интерфейсом пользователя по сети, но текстовый значительно более универсален и, как следствие, надежен.

Резюме

Если вас не будет кидать в холодный или горячий пот при виде командной строки, то пользы от этого будет достаточно много, что бы оправдать потраченное время на ее изучение. Никогда доподлинно не известно, когда, что и где может пригодиться, но, вполне вероятно, знание bash пригодиться обязательно. Особенно, если вы человек "тяжелой" профессии программиста.


Версия для печати


  Ссылки по теме:
http://www.gnu.org/bash
   Официальная страничка коммандного интерпретатора bash (Bourne Again SHell).
  Рядом в разделе:
Click here to begin (07.01.01)
   Волею судеб мне приходится работать с различными операционными системами и пользовательскими оболочками. И с некоторых пор мне кажется, что интерфейс Windows,...   >>>>
Пакет шрифтов Cyr-RFX (10.09.00)
   Руссификация X11 стала в последнее время достаточно простой. Для этого достаточно указать X-серверу то, что он находится в России и попросить...   >>>>
  Рядом по дате:
Олимпиада-2000 в Сиднее (23.09.00)
   Мне не очень нравятся летние виды спорта и поэтому я не особенно слежу за событиями, разворачивающемеся в Сиднее. Точнее сказать, вообще...   >>>>
Автоматизация заполнения базы данных "по студентам", немного статистики (21.09.00)
   Я уже провел две лабораторных работы и один семинар с первым курсом в этом семестре и, так как на лабораторных мне...   >>>>
  Содержание:
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
   C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Просто так
Студенческое
Туризм
  Байки
Фотографии
Комментарии
   Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Благодарности
Форум
Хронология
 
  В этом разделе:
Игры (01.12.01)
   Я очень давно не играл в компьютерные игры (за редким исключением --- например, дорвавшись до тетриса) и когда наконец-то собрал себе...   >>>>
Click here to begin (07.01.01)
   Волею судеб мне приходится работать с различными операционными системами и пользовательскими оболочками. И с некоторых пор мне кажется, что интерфейс Windows,...   >>>>
Командный интерпретатор bash (22.09.00)
   Текст ниже предназначен для тех людей, которые по принципиальным соображениям не пользуются командной строкой, мотивируя это тем, что им там работать...   >>>>
Пакет шрифтов Cyr-RFX (10.09.00)
   Руссификация X11 стала в последнее время достаточно простой. Для этого достаточно указать X-серверу то, что он находится в России и попросить...   >>>>
Emacs (06.09.00)
   Emacs является культовой программой для редактирования текстов. Я думаю, что у людей, которые впервые о нем слышат, должно вызвать удивление номер...   >>>>
Содержание раздела полностью...
   Примерно в тоже время
Олимпиада-2000 в Сиднее (23.09.00)
   Мне не очень нравятся летние виды спорта и поэтому я не особенно слежу за событиями, разворачивающемеся в Сиднее. Точнее сказать, вообще...   >>>>
Автоматизация заполнения базы данных "по студентам", немного статистики (21.09.00)
   Я уже провел две лабораторных работы и один семинар с первым курсом в этом семестре и, так как на лабораторных мне...   >>>>
Хронология полностью...
   Содержание
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
  C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Туризм
  Байки
Фотографии
Комментарии
  Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Студенческое
Просто так
Благодарности
Форум
Хронология
© 2000-2008, Andrey L. Kalinin
mailto:andrey@kalinin.ru
Rambler's Top100