LINUX.ORG.RU
ФорумAdmin

Сохранение консольных команд


2

3

Кто как решает проблему запоминания команд и действий? Какие методы и программы используете?

Понадобилось мне, например, переконвертировать видео из одного формата в другой, или просмотреть подробную информацию о состоянии батареи. Каждый день я вряд ли буду выполнять подобные команды. Но раз в месяц/год они могут понадобиться. Однако, за такое время эти команды улетучиваются как из моей памяти, так и из истории команд. Хотелось бы иметь возможность легко и быстро записать такие команды, с последующей возможностью также легко и быстро найти их и воспроизвести.

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

Недавно осознав, какое огромное количество труда было затрачено на чтение интернета и мануалов, мне стало очень жаль, что это время фактически утеряно. Большую часть всего, что я узнал, я уже давным давно забыл. Стал искать на эту тему, но ничего кроме bash history найти не смог. Под Mac видел программку для админов: что-то вроде каталога полезных команд, с возможностью запустить команду, а также добавлять свои. Под Linux ничего подобного найти не могу. Хотя, ИМХО, та программа не очень удобна, т.к. центральным должен быть не список, а рабочая консоль. Но хоть что-то есть - и то приятно.

Как мне видится решение этих задач.

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

С запоминанием действий сложнее. Было бы удобно, если бы эмулятор имел режим записи, в котором он записывает все запущенные команды, а также отслеживает запуск текстового редактора и сохраняет разницу в измененном файле. Каждой записи присваивается имя, возможно описание и метки. Представление записи может быть как в виде действий в хронологическом порядке, так и с группировкой по командам или по редактируемым файлам. Даже без функции воспроизведения всей записи или отдельных команд подобная вещь была бы крайне полезной для меня. А возможность повторного воспроизведения, возможно, была бы полезна для администраторов, в чьем подчинении большое количество машин.

Ваши мнения?


Ответ на: комментарий от t184256

> не пиши на ЛОРе бреда про интеграцию гипотетического убогого построчного текстового редактора с эмулятором терминала.

Ok, я уже понял, что надо было предложить текстовую утилиту, а не GUI-расширение :)

raa
() автор топика
Ответ на: комментарий от t184256

>Руки прочь от эмулятора терминала. РУКИ ПРОЧЬ!
Хороший совет. Но, к сожалению, в линуксах этот древний кусок говна часто оказывается единственным подходящим инструментом.

интеграцию гипотетического убогого построчного текстового редактора с эмулятором терминала.

А если текстовый редактор не убогий и не построчный?

x3al ★★★★★
()
Ответ на: комментарий от t184256

Типа того. Что такое «карма»?

raa
() автор топика
Ответ на: комментарий от marvin_yorke

> есть man

man - хорошо, но playboy - лучше.

raa
() автор топика
Ответ на: комментарий от x3al

> Acme. Ни разу не использовал kate.

Бегло окинув взглядом не понял как это намазывать на хлеб.

В Kate есть режим встроенного эмулятора терминала. Если его включить - вот он, эмулятор терминала с боковой панелью со списком команд в виде непострочного редактора ))

raa
() автор топика
Ответ на: комментарий от raa

>Бегло окинув взглядом не понял как это намазывать на хлеб.
Любой текст в acme можно выполнить. Без «эмуляторов терминала».

x3al ★★★★★
()
Ответ на: комментарий от x3al

> этот древний кусок говна

А вообще, достаточно смелое заявление об эмуляторе терминала )))

raa
() автор топика
Ответ на: комментарий от x3al

>>Бегло окинув взглядом не понял как это намазывать на хлеб.

Любой текст в acme можно выполнить. Без «эмуляторов терминала».

Любопытно. А вывод пишется прямо в текущий файл под выполняемой строкой? :) Задумался о замене эмулятора терминала на acme. А автодополнение там есть? А команды выполняются в одной сессии?

raa
() автор топика
Ответ на: комментарий от raa

Он — не совсем эмулятор терминала (точнее, acme — это plan9-emacs) и в линуксе выглядит немного странно.

x3al ★★★★★
()
Ответ на: комментарий от x3al

> Он — не совсем эмулятор терминала Ну вот поэтому я и написал «заменить». А странно он выглядит не только в линуксе, но и вообще ))

Я уже устал вбрасывать http://img.flashtux.org/img132dd181b748x61dcf90b.png (на слово тут мне не верят), поэтому

http://habrahabr.ru/company/selectel/blog/120852/

Почитал, интересно, спасибо. Это немного не то, как я Вас понял. Речь не о самой концепции терминалов, а о их внутреннем устройстве, совместимом с печатными машинками. Это ржачно :) Пора переписать терминал с нуля. А насколько я понял призыв «Руки прочь от эмулятора терминала», имелось в виду не избегать его использования, а не портить его всякой гуйней (может я неправильно понял).

Итак, мы пришли к тому, что терминал не нужно расширять, его нужно переписать с нуля под современность. Это смахивает на проект GNL - Gnl is Not Linux.

raa
() автор топика
Ответ на: комментарий от raa

>не портить его всякой гуйней
Это можно испортить? Млин, даже termkit вместе с его единственной реализацией (node.js + гуглехром) более suckless.

Пора переписать терминал с нуля.

Чем-то напоминает ситуацию с иксами и wayland…

x3al ★★★★★
()
Ответ на: комментарий от x3al

И да, в том же plan9 терминалы заметно другие (9term из plan9port показывает их фичи). Впрочем, к линуксам это мало относится.

x3al ★★★★★
()
Ответ на: комментарий от raa

> Пора переписать терминал

ААААА, пора переписать терминал! Терминал сам не перепишется!
Я переписываю терминал 3 раза в год, каждое переписывание занимает 25 суток!

geekless ★★
()
Ответ на: комментарий от x3al

>>не портить его всякой гуйней

Это можно испортить? Млин, даже termkit вместе с его единственной реализацией (node.js + гуглехром) более suckless.


Конечно можно! Человек привык глазеть в черный экран, и тут вдруг я со своей приблудой сбоку эмулятора... :)
TermKit - очень смелый проект. Не слышал о нем раньше. Не успел я поразмышлять о том, как бы мог выглядеть современный терминал, как получил соответствующую ссылку.

Пора переписать терминал с нуля.

Чем-то напоминает ситуацию с иксами и wayland…


Ну да, ну да... Только я не понял, это по-вашему хорошо или плохо? :)
Первое, что мне пришло в голову - это то, что нужно переделать протокол общения с терминалом, откинув все ненужное и преобразовав все нужное в более логичный вид. Но придумать что-то более подходящее чем escape-последовательности трудно, а особого смысла заменять одни последовательности другими я не нашел. Тут скорее нужна стандартизация и определение запрещенных возможностей, а не замена.
А вот выпадающий список автодополнения, как в termkit - это жесть :) Можно реализовать в терминале без особых проблем.

raa
() автор топика
Ответ на: комментарий от geekless

>> Пора переписать терминал

ААААА, пора переписать терминал! Терминал сам не перепишется!

Я переписываю терминал 3 раза в год, каждое переписывание занимает 25 суток!

Так и представил себе, как Вы с отчаянным воплем «ААААА», вырывая клочья волос из головы, 15-й раз переписываете терминал.

Простите за нескромный вопрос, а зачем Вы это делаете?

raa
() автор топика
Ответ на: комментарий от raa

termkit не в выпадающих списках автодополнения, он в дополнительных in/out-потоках для UI, JSON (впрочем, не обязательно JSON, просто утилиты могут сообщать, в каком формате их stdout) и полном отделении логики от представления. UI-часть в теории может быть любой.
А не взлетит оно потому, что слишком мало заинтересованных в этом чтобы сделать хотя бы обёртки над классическими программами.

Тут скорее нужна стандартизация и определение запрещенных возможностей, а не замена.

Вообще не факт. В plan9 выкинули практически всё, в итоге их rc+9term не умеют даже цвета, но с другой стороны софт строго делится на CLI и GUI и нет ни следа уродливого костыля TUI (что даёт возможность сделать эмулятор терминала текстовым редактором или наоборот: текстовый редактор эмулятором терминала). Возможно, есть способ сделать менее категоричное решение.

x3al ★★★★★
()
Ответ на: комментарий от x3al

>логики от представления
Вывода от представления, конечно. termkit-софт не знает, каким цветом и какими иконками украсит вывод termkit-терминал.

x3al ★★★★★
()
Ответ на: комментарий от raa

> TermKit - очень смелый проект. Не слышал о нем раньше. Не успел я поразмышлять о том, как бы мог выглядеть современный терминал, как получил соответствующую ссылку.

Их много таких, и все зафейлились. Вот объемный список: http://code.google.com/p/hotwire-shell/wiki/RelatedProjectsAndIdeas

Скорее всего идея не имеет перспектив вообще.

Первое, что мне пришло в голову - это то, что нужно переделать протокол общения с терминалом, откинув все ненужное и преобразовав все нужное в более логичный вид. Но придумать что-то более подходящее чем escape-последовательности трудно, а особого смысла заменять одни последовательности другими я не нашел.

Вот именно. Они очень удобно покрыты слоями абстракции, и на них можно не общать внимания. Зато когда они нужны, то всегда под рукой.

Тут скорее нужна стандартизация и определение запрещенных возможностей, а не замена.

o_O Такой прогресс нам не нужен. С идеями запрещать и не пущать предлагаю обращаться в Яббл.

geekless ★★
()
Ответ на: комментарий от x3al

> Вообще не факт. В plan9 выкинули практически всё, в итоге их rc+9term не умеют даже цвета, но с другой стороны софт строго делится на CLI и GUI и нет ни следа уродливого костыля TUI (что даёт возможность сделать эмулятор терминала текстовым редактором или наоборот: текстовый редактор эмулятором терминала).

И в этом нет ничего хорошего.

ни следа уродливого костыля TUI

Этот «костыль» позволяет удобно и продуктивно работать. Как в этом обрезанном терминале получить аналоги reverse-search-history, history-search-backward, history-search-forward, bind '«\eq»':«\»\C-aman \C-e\C-m\«» и т.п.?

что даёт возможность сделать эмулятор терминала текстовым редактором или наоборот: текстовый редактор эмулятором терминала

В обычный терминал тоже ничто не мешает добавить режим редактора. (Или в редактор режим терминала.) Распространения это не получило по очевидной причине: это нахрен никому не нужно. Plan9 хороша на уровне общей архитектуры системы. А вот UI там говно.

geekless ★★
()
Ответ на: комментарий от geekless

>> Тут скорее нужна стандартизация и определение запрещенных возможностей, а не замена.

o_O Такой прогресс нам не нужен. С идеями запрещать и не пущать предлагаю обращаться в Яббл.

Я имею в виду объявление явно устаревших функций как «deprecated». Но в общем это не важно, т.к. ничего не меняет, и вообще внутренности терминала никому не интересны. Работает - и пусть работает. :)

raa
() автор топика
Ответ на: комментарий от geekless

>Как в этом обрезанном терминале получить аналоги
Встроить всё это в эмулятор терминала, не в readline.

В обычный терминал тоже ничто не мешает добавить режим редактора.

Нельзя.

x3al ★★★★★
()
Ответ на: комментарий от x3al

> Встроить всё это в эмулятор терминала, не в readline.

Историю команд от случайного мусора он будет через libastral узнавать? Интеллектуальную подстановку тоже?

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

> В обычный терминал тоже ничто не мешает добавить режим редактора.

Нельзя.

Ходить курсорными клавишами по содержимому буфера, выделять текст и отправлять в stdin программы? Как два пальца.

geekless ★★
()
Ответ на: комментарий от geekless

> Ходить курсорными клавишами по содержимому буфера, выделять текст и отправлять в stdin программы? Как два пальца.

Интересно, никогда не слышал. Можно хотя бы ссылочку или намек, как это делается?

raa
() автор топика
Ответ на: комментарий от raa

Наверно, он имеет в виду нечто вроде tmux/screen. Это далеко не то, но местами похоже.

x3al ★★★★★
()

Если ТСа все еще интересует сохранение истории в консоли, а не только альтернативные эмуляторы терминала, то стоит посмотреть сюда

Оно?

Luotaix
()
Ответ на: комментарий от Luotaix

Да-да, все еще интересует. Я просто апаю тему разговорами об альтернативных эмуляторах терминала ;-)

Сходил по ссылке. Это решение я уже находил. Во-первых, это не является полным решением ни для одной из двух обозначенных проблем. Во-вторых я не понял, зачем автор бэкапит историю, и почему он не может просто задать небольшое значение для HISTSIZE и очень большое для HISTFILESIZE. Возможно, на момент написания той заметки в баше еще не было параметра HISTFILESIZE - в таком случае статья вообще не актуальна.

raa
() автор топика
Ответ на: комментарий от raa

> Во-первых, это не является полным решением ни для одной из двух обозначенных проблем.

Возможно потому, что описание проблем не полное? Т.к.:

Понадобилось мне, например, переконвертировать видео из одного формата в другой

grep ffmepg ~/.bash_history.archive - и все варианты кодирования перед вами.

Еще бывает требуется выполнить серию команд и правок. Можно записывать все действия в текстовый файл, но это мутарно

Пишется само, grep'ать можно не только по команде, но и по дате и времени. Это кстати именно то, почему это не аналог

просто задать небольшое значение для HISTSIZE и очень большое для HISTFILESIZE

Во-вторых я не понял, зачем автор бэкапит историю

Автор не бэкапит историю. Если посмотреть внимательно. В итоговом файле команды разбиты по датам и сессиям.

Luotaix
()
Ответ на: комментарий от Luotaix

>> Во-первых, это не является полным решением ни для одной из двух обозначенных проблем.

Возможно потому, что описание проблем не полное? Т.к.:

Запросто

Понадобилось мне, например, переконвертировать видео из одного формата в другой

grep ffmepg ~/.bash_history.archive - и все варианты кодирования перед вами.

Отлично, но это все же просто история. А я хотел бы нечто упорядоченное, но не обременительное (можно и файл истории упорядочить, но это обременительно).

Еще бывает требуется выполнить серию команд и правок. Можно записывать все действия в текстовый файл, но это мутарно

Пишется само, grep'ать можно не только по команде, но и по дате и времени. Это кстати именно то, почему это не аналог

Это да. Но нет информации об изменениях, сделанных в файлах.

В общем, это вариант, но лично мне не особо нравится.

raa
() автор топика
Ответ на: комментарий от amorpher

> clicompanion посмотри.

Спасибо пребольшое. Это почти в точности именно так, как я себе это представлял. Только одно не понятно: как это теперь использовать, сделав выбор в пользу какого-то определенного эмулятора терминала. Т.е., раньше я использовал konsole, а вчера решил попробовать yakuake. А теперь что получается - нужно отказаться от любимого эмулятора в пользу какого-то кастрированного, но со списком команд? За что боролся - на то и напоролся :) Меня теперь не покидает чувство, что если такому инструменту и быть, то только в виде cli-утилиты, но никак не в gui.

raa
() автор топика
Ответ на: комментарий от raa

> Интересно, никогда не слышал. Можно хотя бы ссылочку или намек, как это делается?

Не знаю, реализовано ли где-либо, никогда не интересовался.

как это делается?

У нас есть буфер вывода — двумерный массив символов. Ходим по нему курсорными клавишами, выделяем фрагменты, хоткеем отправляем в пайп, соединяющий терминал с программами. Что тут в принципе может быть такого, что потребовало бы развернутого объяснения?

geekless ★★
()
Ответ на: комментарий от geekless

> Что тут в принципе может быть такого, что потребовало бы развернутого объяснения?

Я думал, есть реализация...

raa
() автор топика
10 августа 2011 г.
Ответ на: комментарий от raa

Замутите под вайном и попробуйте Xshell (от Netsarang), желательно 3-й. Его конечно тру бородатые консоляторы обзывают как подобие эмулятора терминала со свистелками и перделками, но фича с выбором панелек и функциями «Quick Command Sets» кажется идеально подподает под параметры поиска и вполне удобна для забиндивания длинных комманд, файлов (как с Append CR, так и без).

kenga
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.