|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
||||||
Программа чтения и повторного запуска команд из .bash_history25.01.2025, 22:23. Показов 3415. Ответов 20
Метки нет (Все метки)
Привет всем.
Сконструировал такую программу для терминала Linux. Принцип: читает .bash_history, позволяет по номеру запускать команду. Есть управление стрелками: вверх/вниз - переход к ближайшей, левая/правая - скачок на 30 позиций. Поскольку подключил terminos и нашел переключение терминала в non-canonical режим на stackoverflow, то можно переходить по разрядам, для повтора команды надо только нажать Enter. Вопросы отвлеченные и не очень: есть ли в такой программе смысл?! Для себя заметил, что иногда бывает, повторяю одни и те же команды, иногда несколько сразу. Нужно ли буфиризировать файл или каждый раз читать .bash_history?! Пока сделал два режима. Полноценный скроллинг, конечно, не получился. Хотел обойтись мин. средствами (теми, с которыми знаком). По самому коду: не слишком ли запутанный получился?! Форматирование код на сайте, если что (автоформатирование).
0
|
||||||
| 25.01.2025, 22:23 | |
|
Ответы с готовыми решениями:
20
Программа работает как надо только после повторного запуска Как проверить, что программа запущена (избежать повторного запуска)?
|
|
2675 / 1336 / 481
Регистрация: 08.11.2016
Сообщений: 3,697
|
||||||
| 25.01.2025, 23:29 | ||||||
Сообщение было отмечено dcc0 как решение
Решение- стрелками вверх и вниз пролистываются список предыдущих команд - сочетанием CTRL+R вызывается поисковик по этому самому .bash_history собственно файл .bash_history для этого и существует. Смысл в велосипеде есть: как программка для обучения или если в нативных средствах вам не хватает какого-то функционала, то пурка бы, собственно, и не па. Например: Второе - мэйн ужасен, тут прямо необходима декомпозиция - больше функций богу функций.
2
|
||||||
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
||
| 25.01.2025, 23:45 [ТС] | ||
|
Но у меня эти клавиши какие-то странные коды выдают. И легче оказалось на стрелки боковые сделать. Но тут скроллинг получился не по рзамеру экрана, а переход на кол-во позиций. В иделае-то, скорллинг - пейэджер. Спасибо за развёрнутый ответ.
0
|
||
|
2675 / 1336 / 481
Регистрация: 08.11.2016
Сообщений: 3,697
|
|||
| 26.01.2025, 00:32 | |||
|
0
|
|||
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|
| 26.01.2025, 13:01 [ТС] | |
|
Нашёл. Спасибо. Стрелки (у меня по крайне мере) - 67 и 68, если через целые обрабатывать.
0
|
|
|
2362 / 1573 / 723
Регистрация: 17.03.2022
Сообщений: 5,091
|
||
| 26.01.2025, 14:12 | ||
![]() Так что в смысле потренироваться оно, наверное, полезно. Именно как нужная утилита - скорее нет.
0
|
||
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|||||||||||
| 26.01.2025, 18:38 [ТС] | |||||||||||
|
Из научно-практического интереса попытался сделать возможность редактирования команды.
Наверное, проще vim запускать и редактировать строку в .bash_history. Хотя не знаю, как сделать переход к номеру строки в виме из программы. Вообще можно перезаписать отредактированную команду в конец .bash_history. Но кое-что получилось. Наверное, в запутанности и бесполезности кода победил бы, но теперь можно редактировать команду, только с ограничениями по длине строки. Не как учебный пример оставляю, а только для ознакомления: (Заодно понял, как сделать простеший редактор файла (посимвольно)).
Простейший редактор файла (с ограничениями):
Видео, как это работает:
0
|
|||||||||||
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
|
| 26.01.2025, 19:48 | |
Сообщение было отмечено dcc0 как решение
Решение
1
|
|
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|
| 26.01.2025, 20:39 [ТС] | |
|
Спасибо. Это сильно упрощает. Но все равно еще надо номер вернуть из функции. Склеить все это в строку и вызвать
system с vi +номер файл. Если уж редактировать, то проще вызвать vi. update: Впрочем возможно сделать редактирование и через vi по номеру, так как номер есть уже в select. Использовал snprintf: Ниже вариант редактирования нужной команды из .bash_history через редактор vi. https://gitflic.ru/project/dcc... nch=master Но без vi, конечно, интереснее, но нуждается в доработках: https://gitflic.ru/project/dcc... nch=master
0
|
|
|
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
|
||||||
| 27.01.2025, 12:50 | ||||||
|
dcc0,
редактор vim реализован в архитектуре клиент/сервер, и поддерживает целый букет способов удаленного управления собой через внешний процесс. чтобы не было путаницы, стоит договориться о терминах: 1) сейчас 26-й год 21-го века; никакого vi не существует, это просто alias для вызова vim 2) от редактора vim уже сейчас стоит отказаться в пользу nvim ( neovim ) ( предполагаю, что до фактического момента превращения vim в alias для nvim осталось лет 5 )
0
|
||||||
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|
| 27.01.2025, 14:29 [ТС] | |
|
Не знал, что vi в архиве. Как-то пропустил этот момент.
nvim нет у меня. И в общем получилось сделать и через vim, и без него. Хотя для исходной задачи это вообще не нужно (доп. обвес, интереса ради). И переделать, подозреваю, достаточно сменой команды вызова в коде. Спасибо, что уделили время: прочитали эту тему и оставили полезное сообщение.
0
|
|
|
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
|
||
| 27.01.2025, 15:12 | ||
|
требует установки. пока ещё требует. но поддержка vim сообществом безусловно зачахнет, учитывая факт существования nvim, имеющего мощность поддержки в 40 чел и 100% совместимость с vim вплоть до версии 8 и тогда на сцене останется только nvim.
0
|
||
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|
| 28.01.2025, 00:21 [ТС] | |
|
У меня там в основном сообщении ошибка-опечатка - "буфЕризация", конечно же.
В итоге: сделал два режима редактирования. Через vim и собственный вариант редактирования строки.
0
|
|
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|
| 28.01.2025, 15:01 [ТС] | |
|
В окончательной редакции прога как-то так работает:
0
|
|
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|
| 29.01.2025, 15:21 [ТС] | |
|
Крайний вариант: https://gitflic.ru/project/dcc... nch=master
Если прог-а запускается не из директории пользователя, то надо указывать абсолютный путь к .bash_history. Не нашел, обрабатывает ли fopen в C относительные пути вида ~/.bash_history. У меня не работает. Поэтому такой финт.
0
|
|
|
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
|
||
| 29.01.2025, 16:15 | ||
|
функция принимает значение крайнего оператора к терминам FIFO и LIFO добавляется КИФО - крайний вошёл первый вышел Раньше этот кусочек назывался последняя плоть, но, благодаря давлению работников экстремальных профессий ( лётчик-испытатель, шахтёр, пожарный ), теперь называется крайняя.
0
|
||
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
||
| 29.01.2025, 16:39 [ТС] | ||
|
select_history 123 130 - выполнить команды с 123 по 130). Но, может, отдельную программу для этого лучше (проще, наверное, на bash), чтобы не перегружать функионалом. Сейчас уже получается довольно удобно повторять команду, например, компиляции, только нажав на Enter (т.е. достаточно сместиться к команде 1 раз). Сместиться к следующей можно на стрелку.
0
|
||
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
|||||||
| 29.01.2025, 18:39 | |||||||
1
|
|||||||
|
1 / 1 / 0
Регистрация: 12.07.2016
Сообщений: 37
|
|
| 29.01.2025, 21:07 [ТС] | |
|
Спасибо. Вроде шуршит этот вариант.
Но даже не знаю, как лучше. Пока оставлю подключение файла .bash_history через аргумент командной строки. И так код уже довольно запутанный. А тут еще пара-тройка заголовоных файлов добавляется и путь, вестимо, надо склеивать через strcpy или snprintf. Как-то красиво обыграть работу со структурами я пока не умею. Update (так вот): https://gitflic.ru/project/dcc... nch=master
0
|
|
|
Супер-модератор
|
|
| 29.01.2025, 21:13 | |
Сообщение было отмечено Annemesski как решение
Решение
1
|
|
| 29.01.2025, 21:13 | |
|
Помогаю со студенческими работами здесь
20
Запрет повторного запуска Исключение повторного запуска Запрет повторного запуска приложения Блокировка повторного запуска программы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|