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

9

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

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

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

Спасибо,

JLo
источник

Ответы:

14

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

poolie
источник
Спасибо за команду 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

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

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

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

$ history

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

$ history | grep ls

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

neo0
источник
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
1

История расположена ~ / .bash_history. Также, для удобного поиска истории в bash нажмите ctrl + r и введите начало нужной команды.

и http://ubuntuforums.org/showthread.php?t=204382 для удобных псевдонимов и хитростей командной строки

Самка луня
источник