Поисковая команда в истории из выпадающего списка

Поиск в истории командной строки с помощью Ctrl+S или Ctrl+R хорош, но это показывает только одну строку. Было бы более удобно иметь что-то как выпадающий список объектов для данного условия поиска. Действительно ли такое решение доступно?

1
задан 19 September 2015 в 13:21

3 ответа

Я установил бы , история показывает поле от Martin Dvorak . Я использую его на всех своих машинах. Поскольку Вы вводите строку, которую это показывает Вам всем, команды включали в Вашу историю включая те строки. Результаты по умолчанию отсортированы по тому, как часто Вы используете их. Можно перейти со стрелками. Это очень гибко.

Установка на Ubuntu проста, хотя необходимо будет добавить его ppa:

sudo add-apt-repository ppa:ultradvorka/ppa
sudo apt-get update
sudo apt-get install hh

программа вызывается с гд

0
ответ дан 7 December 2019 в 16:09

Я сделал бы что-то вроде этого: history | grep keyword

0
ответ дан 7 December 2019 в 16:09

Интересный вопрос. Это не существует насколько я знаю,

НО...

как всегда, это может быть сделано.

Решение, каково это

Если Вы работаете, например, (в моей системе):

$ search_history aap

~/.bash_history ищется соответствия:

[1] printf aap
[2] echo aap
[3] du -sh '/home/jacob/Bureaublad/aap' 
[4] echo "een aap op een fiets" | awk '{ print $1 }'
[5] sudo chown root '/home/jacob/Bureaublad/aap' 
[6] yad --entry-text=aap
[7] python3 -c "[print(round(float(n)), end=' ') for n in open('test2').read().split()]" > aap
[8] python '/home/jacob/Bureaublad/aap' 


press the number of the line + ENTER to execute, or x to exit: 

Как текст Саис, нажмите число для выполнения соответствующей команды в текущем терминале, или x выходить.

Установка

  1. Потребность сценария (сценариев) xdotool "вводить" команды в терминал:

    sudo apt-get install xdotool
    
  2. Создайте, если это не существует, каталог ~/bin
  3. Сценарий 1 копии в пустой файл, сохраните его как search_history (никакое расширение) в ~/bin
  4. Сценарий 2 копии в пустой файл, сохраните его как type_command.sh (с расширением)
  5. Сделайте оба исполняемых файла сценариев
  6. "Активировать" каталог ~/bin в $PATH, также:

    • зарегистрируйтесь/в, или
    • выполненный source ~/.bashrc

Сценарий (сценарии)

сценарий 1
поиски ~/.bash_history для строк, соответствуя (содержащий) искавшую строку, создает пронумерованный список в терминале

#!/usr/bin/env python3
import os
import subprocess
import sys

s = sys.argv[1]
lines = [l for l in open(os.environ["HOME"]+"/.bash_history").read().splitlines() if s in l]
if len(lines) == 0:
    print("no matches")
else:
    for i, l in enumerate(lines):
        print("["+str(i+1)+"]", l)
    nextact = input("\npress the number of the line + ENTER to execute, or x to exit: ")
    if nextact == "x":
        pass
    else:
        # not using try/except because if an error occurs, you might want to know the cause
        subprocess.Popen(["type_command.sh", lines[int(nextact)-1]])

сценарий 2
вводит соответствующую команду. Это должно быть другим (вторым) сценарием, так как мы должны выйти из первого сценария, чтобы смочь выполнить команду в терминале, точно так же, как введенная команда.

#!/bin/bash
sleep 0.2
xdotool type "$1"
xdotool key KP_Enter

enter image description here

Примечание:

в случае, если Вы предпочли бы пропускать дубликат - строки, изменять в сценарии 1 строку:

lines = [l for l in open(os.environ["HOME"]+"/.bash_history").read().splitlines() if s in l]

в:

lines = [l for l in set(open(os.environ["HOME"]+"/.bash_history").read().splitlines()) if s in l]
1
ответ дан 7 December 2019 в 16:09

Другие вопросы по тегам:

Похожие вопросы: