- PVSM.RU - https://www.pvsm.ru -

Заметки о Unix: история Unix до readline

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

Заметки о Unix: история Unix до readline - 1 [5]

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

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

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

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

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

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

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

Автор: ru_vds

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/unix-2/361807

Ссылки в тексте:

[1] GNU Readline: https://en.wikipedia.org/wiki/GNU_Readline

[2] Bash: https://en.wikipedia.org/wiki/Bash_(Unix_shell)

[3] V7: https://en.wikipedia.org/wiki/Version_7_Unix

[4] 4.2. BSD: https://en.wikipedia.org/wiki/History_of_the_Berkeley_Software_Distribution#4.2BSD

[5] Image: https://habr.com/ru/company/ruvds/blog/542378/

[6] tcsh: https://en.wikipedia.org/wiki/Tcsh

[7] справке по csh из 4.2. BSD: https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.2BSD/usr/man/man1/csh.1

[8] cf: https://www.gnu.org/software/bash/manual/html_node/History-Interaction.html

[9] Источник: https://habr.com/ru/post/542378/?utm_source=habrahabr&utm_medium=rss&utm_campaign=542378