
Приложение «Терминал» в macOS отслеживает последние использованные вами команды, чтобы вы могли повторно использовать их позже. Вот как очистить историю команд Терминала.
Когда вы вводите команды и нажимаете клавишу «Return» в приложении «Терминал» macOS, оно запоминает вводимые вами команды и сохраняет их на случай, если вы захотите снова использовать те же команды позже.
В Терминале вы можете нажимать клавиши со стрелками вверх и вниз на клавиатуре Mac, чтобы переключаться между всеми последними командами. При этом Терминал заменяет все, что находится в командной строке, каждой командой из сохраненной истории команд при нажатии клавиш со стрелками.
Вы можете перемещаться вперед или назад по истории команд в Терминале и нажимать клавишу возврата для любой сохраненной команды, чтобы запустить ее еще раз.
Возможно, вам захочется удалить историю команд Терминала по соображениям безопасности, или вы можете работать над одной задачей с использованием определенных технологий, а затем переключиться на другую задачу в Терминале, используя другие технологии, использующие другой набор команд.
Варианты оболочки и тупые клеммы
Первые компьютеры UNIX были созданы в 1970 году и использовали тупые терминалы, подключенные к мэйнфреймам, на которых у пользователей были учетные записи с разделением времени. Каждый пользователь будет использовать терминал для подключения к мейнфрейму, который фактически выполняет команды, введенные в терминал.
Среди первых производителей тупых терминалов были Digital Equipment Corporation, UNISYS, Wang, WYSE, Lear Siegler и другие. Еще раньше — в 1960-х годах IBM продавала большие автономные бумажные терминалы, такие как IBM 2741, у которых была собственная подставка, похожая на стол.
Одна компания, Carterfone, была одной из первых, кто позволил тупым терминалам соединять удаленные полевые мейнфреймы и запускать команды через телефонный модем с акустической связью — устройство, преобразующее компьютерные сигналы в звук.
В начале 1970-х годов Лир Сиглер выпустил серию терминалов, которые впоследствии стали популярными, начиная с ADM-1 в 1972 году, а затем и до чрезвычайно популярного ADM-3A.
Все это было до революции персональных компьютеров в конце 1970-х годов. Сегодня люди запускают на своих компьютерах операционные системы UNIX-варианты и используют встроенные приложения терминала или оболочки для взаимодействия с ОС на одном и том же компьютере.

Lear Siegler была куплена в 1986 году инвестиционными фирмами Уолл-стрит, а ее подразделения и технологии были проданы нескольким другим компаниям. К этому времени бум персональных компьютеров был уже в самом разгаре, и популярность тупых терминалов угасла.
После того, как в начале 1980-х годов были представлены модульные разъемы для телефонных линий, несколько производителей домашних компьютеров, включая Apple, Atari и Commodore, начали продавать свои собственные телефонные модемы.
Позже WYSE была куплена компанией DELL, которая до сих пор продает компьютеры «тонких клиентов», которые, по сути, являются сегодняшними преемниками тупых терминалов. Некоторые очень ранние системы UNIX имели бумажные терминалы вместо дисплеев.

Первый модем прямого подключения Apple для модульных телефонных систем США.
В течение короткого периода в 1980-х годах AT+T производила и продавала комбинированные ПК, которые выполняли функции как персональных компьютеров, так и простых терминалов и включали интегрированные телефонные и факсимильные системы.
AT+T активно участвовала в создании UNIX в Bell Labs в конце 1960-х — начале 1970-х годов.

Пользователь терминала UNIX в лаборатории мэйнфреймов, около 1978 года. С разрешения Дэйва Винера, лицензия Creative Commons Share-Alike.
На протяжении десятилетий существовало несколько вариантов программ-оболочек в операционной системе UNIX (на которой основана macOS).
Оболочки просто относятся к программам командной строки, которые позволяют пользователям UNIX вводить текстовые команды для запуска ОС. Оболочка, по сути, представляет собой интерпретатор команд и механизм сценариев для запуска типизированных команд или нескольких команд последовательно из файла.
Терминал macOS — это просто приложение macOS, которое находится поверх программы оболочки.
На протяжении десятилетий существовало несколько вариантов оболочек UNIX, включая оболочку Bourne-again, оболочку Bash из проекта GNU, оболочку Korn (ksh), оболочку C (csh), ZShell (zsh), Fish и другие.
POSIX — это аббревиатура от Portable Operating System Interface (Интерфейс портативной операционной системы), стандарт и торговая марка IEEE. POSIX был создан для обеспечения единого совместимого стандарта как для операционных систем, так и для API-интерфейсов приложений на разных платформах.
По POSIX доступно много хороших книг. Существует также стандартная библиотека многозадачного программирования POSIX, называемая pthreads.
Оболочки в macOS
На протяжении десятилетий Apple использовала оболочку Bash в качестве стандартной оболочки macOS. Когда Apple выпустила macOS Catalina, она изменила оболочку по умолчанию на zsh. Обе оболочки схожи с небольшими отличиями.
Настоящая причина, по которой Apple решила перейти с Bash на zsh в macOS, на самом деле связана с лицензированием. Bash теперь находится под лицензией GPL v3, которая несовместима с некоторыми политиками Apple в отношении открытого исходного кода.
По большей части все, что вы можете сделать в Bash, вы можете сделать и в zsh. Таким образом, изменение не является проблемой для большинства пользователей.
Единственное существенное отличие заключается в том, что для правильной работы некоторых сценариев оболочки в zsh требуется строка shebang в верхней части каждого файла сценария. Строка shebang обычно имеет вид #!/bin/bash или #!bin/bash/sh.
Вы можете узнать больше об оболочке zsh на сайте zsh.org.

Ранний мэйнфрейм, работающий в сети ARPANET — предшественник Интернета. Обратите внимание на бумажный тупой терминал справа.
Использование команды истории
zsh включает команду истории, которая является частью библиотеки истории GNU.
В Терминале macOS, чтобы использовать команду истории, просто введите историю в Терминал и нажмите Return. По умолчанию команда истории печатает последние шестнадцать команд, введенных в Терминал.
Управление и очистка истории zsh
Предыдущие версии zsh и других оболочек предоставляют флаг -c для использования с командой истории. Флаг -c можно использовать для очистки истории терминала в macOS, но начиная с macOS Catalina флаг -c больше не поддерживается для команды истории.
Если вы используете zsh, чтобы очистить историю терминала, вместо этого используйте флаг -p, который выполняет то же самое. Введите историю -p в Терминал и нажмите Return.
Вся история оболочки очищается мгновенно – без предупреждения.
Другой способ очистить историю zsh в macOS — отредактировать сам файл скрытой истории.
Два скрытых файла в пользовательской папке вашей macOS определяют, как ведет себя zsh и как сохраняется история zsh. Это файлы .zshrc и .zsh_history соответственно.
В macOS скрытые файлы и папки в файловой системе начинаются с точки («.») в именах файлов. Ранее на мы подробно рассказывали, как показывать или скрывать скрытые файлы в Finder.
Чтобы начать показывать невидимые файлы в Finder (если вы еще этого не сделали), вам необходимо отобразить загрузочный диск на рабочем столе Finder, включив жесткие диски в окне Finder->Настройки из пункта меню в строке меню Finder. .

Включите «Жесткие диски» на вкладке «Общие» в окне настроек Finder.
.zshrc — это профиль или файл конфигурации, который определяет переменные среды оболочки, пути к другим файлам оболочки или командным программам UNIX, а также экспорт переменных оболочки и среды в систему и другие программы.
.zshrc читается и загружается системой, когда вы входите в систему как пользователь на своем Mac.
.zsh_history — это обычный текстовый файл, в котором хранятся все команды, которые вы ранее использовали в приложении «Терминал» macOS. Каждый раз, когда вы вводите команду в Терминале и нажимаете Return, команда сохраняется в .zsh_history.
Чтобы очистить и сбросить историю zsh, сначала выйдите из Терминала, затем откройте файл .zsh_history, удалите его содержимое, сохраните его, затем выйдите из системы и снова войдите в macOS или перезагрузите Mac.
Вы также можете удалить сам файл .zsh_history, если Терминал не запущен, затем выйти из системы и снова войти или перезагрузить компьютер. Терминал автоматически воссоздаст файл при следующем запуске и введет команду в командной строке.
Программирование с использованием Исторической библиотеки GNU
Оказывается, Библиотека истории GNU (GNUHL) довольно мощная и предоставляет собственный API программирования на языке программирования C. Большая часть того, что zsh делает в команде History, выполняется вызовом GNUHL.
GNUHL может читать историю zsh, его сохраненные команды и программно передавать команды в качестве входных данных для других новых команд.
В Интернете можно найти множество руководств по программированию из библиотеки истории GNU.
Основным типом данных истории для GNUHL является структура C или структура типа _hist_entry:
typedef struct _hist_entry { char *line; символ *данные; } HIST_ENTRY;
Объявление typedef в C определяет новое имя типа на основе предопределенного типа — в этом случае HIST_ENTRY определяется как то же самое, что и struct _hist_entry.
typedef в C позволяет сократить объявления переменных в коде, не используя объявление структуры для каждой объявленной переменной. Вместо этого в этом случае вы можете просто использовать HIST_ENTRY, что сократит код.
Каждое поле типа _hist_entry имеет тип char или символ. Тип char в C используется для представления одного символа текста (представьте, что это контейнер для буквы, цифры или символа).
Переменная char * — это просто указатель C — переменная, содержащая адрес памяти, указывающий на что-то. Строки C в памяти обычно представляются указателем на массив символьных переменных.
Структуры C позволяют программистам легко объединять несколько переменных в одну большую сгруппированную переменную для облегчения доступа в дальнейшем. Каждая переменная-член в структуре C называется полем.
Поэтому, когда вы вводите строку в приложении «Терминал» macOS, оболочка создает новую _hist_entry для каждой команды, сохраняет ее в памяти и записывает поле *data в файл .zsh_history.
В следующий раз, когда вы откроете Терминал, он снова считывает файл истории и восстанавливает список истории, используя массив записей _hist_entry в памяти.
В программировании на C вы можете определить массив переменных, используя либо [] синтаксис или с помощью указателя или дескриптора массива в памяти. Дескриптор в C является указателем на другой указатель в памяти и обозначается двойной звездочкой: **.
Раннее программирование на Mac широко использовало дескрипторы, и мы не будем вдаваться во все подробности того, почему дескрипторы существуют, но достаточно сказать, что они позволяют операционной системе перемещать переменные в памяти без необходимости программистам отслеживать эти перемещения.
В GNUHL дескриптор списка истории может быть определен как один дескриптор, указывающий на начало массива записей истории. В С:
HIST_ENTRY **the_history_list;
GNUHL также поддерживает единую структуру состояний, которая определяет текущее состояние библиотеки истории в любой момент времени, как это определено типом данных _hist_state:
typedef структура _hist_state
Мы не будем здесь вдаваться в подробности структуры _hist_state. Для получения дополнительной информации ознакомьтесь с документацией по программированию библиотеки истории GNU.
Достаточно сказать, что структура _hist_state содержит дескриптор массива записей истории, смещение в массиве записей истории в байтах, количество сохраненных записей, количество возможных слотов для записей и некоторые флаги.
Если у вас есть указатель или дескриптор структуры _hist_state, вы можете пройтись по массиву записей истории и проверить каждую запись.
Существует также обширный API C для управления списком истории, включая добавление, удаление и замену записей, получение состояния, получение информации о списке истории, навигацию по списку и поиск.
Существуют также API для управления самим файлом истории. Используя простое программирование на C, довольно легко читать, искать и изменять историю. В документации по программированию GNUHL приведено несколько примеров на языке C.
История UNIX и терминалов увлекательна, а терминал macOS — это мощный способ использования команд UNIX на Mac. Использование истории Терминала позволяет вам быстро повторно использовать сложные команды Терминала без необходимости каждый раз вводить их заново.









