...

воскресенье, 21 февраля 2021 г.

[Перевод] Заметки о Unix: история Unix до readline

Unix и программы, работающие в этой ОС, существуют уже очень давно. В частности, библиотека GNU Readline появилась в 1989 году (как и Bash). Времени существования этой библиотеки (и подобных проектов) вполне достаточно для того чтобы она стала бы распространённым инструментов Unix-оболочек. В наши дни совершенно естественно воспринимать readline как нечто такое, что всегда было в Unix. Но, конечно, на самом деле это не так. Unix в её современном виде ведёт историю от V7 (1979) и 4.2. BSD (1983), поэтому множество Unix-дистрибутивов было разработано до появления readline. Это, в некоторой степени, сделало их такими, какими они были.


(Нельзя сказать, что GNU Readline и Bash были первоисточниками возможностей редактирования и автодополнения команд, да и прочего подобного «в стиле readline». В Unix похожие методы работы восходят, как минимум, к 1983 году, к tcsh. Но оболочка tcsh, по разным причинам, не получила широкого распространения.)

Одним из очевидных последствий отсутствия readline было появление командной оболочки csh. Эта оболочка поддерживала множество инструментов для работы с историей команд. Их работа была основана на внедрение в командную строку особых строк. Обратимся к справке по csh из 4.2. BSD:

Механизмы подстановки из истории команд используют слова из ранее введённых команд в роли частей новых команд. Это упрощает повторение команд или аргументов ранее введённых команд в текущей команде. Благодаря этому упрощается и исправление опечаток в ранее введённых командах — для этого приходится вводить меньше символов, к тому же, такой стиль работы даёт больший уровень уверенности в правильности исправленной команды. Работа системы подстановки из истории основана на использовании символа !, который может быть расположен в любом месте входного потока (при условии того, что не образуются вложенные конструкции).

Пожалуй, самой известной среди пользователей tcsh командой подстановки из истории является !!, которая повторяет предыдущую команду. В Bash есть похожий механизм, cf, и даже сегодня в руководстве по Bash есть указание на сходство cf с csh-версией соответствующего инструмента. Полагаю, что в наше время большинство тех, кто использует Bash, не применяет механизмы Bash для работы с историей команд, а просто прибегает к readline-инструментам, с которыми обычно проще работать.

(Это — очевидное наблюдение, но с течением времени детали прошлого Unix различимы всё слабее, поэтому легко забыть о том, как далеко в прошлое уходит история некоторых из частей этой ОС. По крайней мере, для меня это именно так.)

P.S. У меня возникает такое ощущение, что широкая распространённость механизмов автодополнения команд и имён файлов понемногу влияет на то, какие имена команд и файлов применяют пользователи. Во времена, когда автодополнения не было, очень важным было то, чтобы имена команд и файлов были бы как можно короче. Неважно было то, что они могли быть очень похожи друг на друга, что могло бы привести к тому, что системе автозавершения ввода было бы сложно их различать. Как известно, короткие имена команд пользуются популярностью в Unix. Такие команды можно вводить быстрее, чем более длинные. В окружении V7 это имеет большое значение.

Пользуетесь ли вы tcsh?

Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий