Выборочная команда-история в терминале?


9

Внутри терминала, когда вы нажимаете на клавиатуре вверх, вы получаете возможность видеть по порядку предыдущие команды, которые вы ему давали ранее. Мне было интересно, был ли способ видеть только команды в прошлом, начиная с-например, "ls -l". Таким образом, если список команд:

  1. ls -l -a
  2. CMake
  3. CD ~ / Рабочий стол
  4. CMake

Способ просто написать «ls» и табуляцию или любую другую комбинацию нажатий клавиш, необходимую для вызова предыдущей команды, передающей терминал, начинающийся с «ls»

Спасибо,

Ответы:


14

Это не покажет вещи только начиная с ls, но вы можете сделать, Ctrl-R lsчтобы сделать обратный поиск по истории. Повторите, Ctrl-Rчтобы найти следующий матч.


Спасибо за команду CTRL+Rбыстрого доступа.
Клебер С.

8

Иногда полезно иметь это ...

пример

Подключение к другой машине с помощью ssh:

начать печатать

ssh

Используйте PgUpключ, и ваш ssh заканчивается вашим последним использованным ... нажмите еще PgUpраз, и он даст вам следующий и так далее. Нравится?

Вы можете использовать это:

Отредактируйте ваш .bashrc ( vi /home/<yourfolder>/.bashrc) и добавьте это:

$if Bash
    # Search history back and forward using page-up and page-down
    "\e[5~": history-search-backward
    "\e[6~": history-search-forward

    # Completion
    set match-hidden-files off
    set page-completions off
    set completion-query-items 350
    set show-all-if-ambiguous on

$endif

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


Вы даже можете привязать его к клавишам со стрелками вверх / вниз bind '"\e[A": history-search-backward'; bind '"\e[B": history-search-forward', что делает его еще более интуитивным.
Фриц

5

Чтобы увидеть историю команд, используйте команду:

$ history

Если вы хотите, чтобы предыдущая команда начиналась, например, с «ls», я думаю, что я использую:

$ history | grep ls

Конечно, вывод будет содержать не команду, а символы "ls", но я думаю, что это может помочь.


2

Самый простой способ достичь того, что вы хотите, это !<whatever-command>. Например, чтобы выполнить то, lsчто вы выполнили последним, вы можете сделать a !ls. Посмотрите на следующий журнал, чтобы увидеть, если это то, что вам нужно:

nits@nits-excalibur:~$ ls /mnt/Storage_1/Music/
Music I  Music II  Music III  Music IV  Music V  Music_VI
nits@nits-excalibur:~$ cd Documents/
nits@nits-excalibur:~/Documents$ top
nits@nits-excalibur:~/Documents$ !ls
ls /mnt/Storage_1/Music/
Music I  Music II  Music III  Music IV  Music V  Music_VI

1
Это запускает команду без ее отображения, есть ли альтернатива, которая отображает ее как запрошенный OP?
Бруно Перейра

В zsh вы можете, setopt HIST_VERIFYи команда будет помещена в ваш буфер ввода, где вы можете либо нажать Enter, чтобы принять его, либо отредактировать.
Poolie

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.