Поиск в истории командной строки с помощью Ctrl+S или Ctrl+R хорош, но это показывает только одну строку. Было бы более удобно иметь что-то как выпадающий список объектов для данного условия поиска. Действительно ли такое решение доступно?
Я установил бы , история показывает поле от Martin Dvorak . Я использую его на всех своих машинах. Поскольку Вы вводите строку, которую это показывает Вам всем, команды включали в Вашу историю включая те строки. Результаты по умолчанию отсортированы по тому, как часто Вы используете их. Можно перейти со стрелками. Это очень гибко.
Установка на Ubuntu проста, хотя необходимо будет добавить его ppa:
sudo add-apt-repository ppa:ultradvorka/ppa
sudo apt-get update
sudo apt-get install hh
программа вызывается с гд
Я сделал бы что-то вроде этого: history | grep keyword
Интересный вопрос. Это не существует насколько я знаю,
НО...
как всегда, это может быть сделано.
Если Вы работаете, например, (в моей системе):
$ 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
выходить.
Потребность сценария (сценариев) xdotool
"вводить" команды в терминал:
sudo apt-get install xdotool
~/bin
search_history
(никакое расширение) в ~/bin
type_command.sh
(с расширением)"Активировать" каталог ~/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
в случае, если Вы предпочли бы пропускать дубликат - строки, изменять в сценарии 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]