Histórico de comando seletivo no terminal?

9

Dentro de um terminal, quando você pressiona o teclado, consegue ver os comandos anteriores que você deu a ele antes em ordem. Fiquei me perguntando se havia uma maneira de ver apenas os comandos no passado, começando com -por exemplo, "ls -l". Dessa forma, se a lista de comandos for:

  1. ls -l -a
  2. cmake
  3. cd ~ / Desktop
  4. cmake

Uma maneira de escrever "ls" e tab ou qualquer combinação de teclas necessárias para exibir o comando passado, cedendo ao terminal começando com "ls"

Obrigado,

jlo
fonte

Respostas:

14

Ele não mostrará as coisas apenas no início ls, mas você pode Ctrl-R lsfazer uma pesquisa inversa no histórico. Repita Ctrl-Rpara encontrar a próxima partida.

poolie
fonte
Obrigado pelo CTRL+Rcomando de atalho.
precisa
8

Às vezes é útil ter isso ...

Exemplo

Conectando a outra máquina usando ssh:

começe a digitar

ssh

Use a PgUptecla e seu ssh termina com o último usado ... pressione PgUpnovamente e ele fornece o próximo e assim por diante. Gosto disso?

Você pode usar isto:

Edite seu arquivo .bashrc ( vi /home/<yourfolder>/.bashrc) e adicione:

$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

Isso adiciona apenas ao terminal do usuário essa função. Você terá que editar também o da raiz para ter o mesmo: você pode seguir este tutorial no wiki, não há como errar, também há muitas coisas extras para melhorar sua experiência no terminal ...

maniat1k
fonte
Você pode até ligá-lo às teclas de seta Para cima / Para baixo:, bind '"\e[A": history-search-backward'; bind '"\e[B": history-search-forward'tornando-o ainda mais intuitivo.
Fritz
5

Para ver o histórico do comando, use can use:

$ history

Se você deseja apenas ver o comando passado começar com, por exemplo, "ls", na minha opinião, utilizo:

$ history | grep ls

Certamente a saída conterá algo que não é um comando, mas conterá caracteres "ls", mas acho que pode ajudar.

neo0
fonte
2

A maneira mais fácil de conseguir o que você deseja é !<whatever-command>. Por exemplo, para executar o lsque você executou por último, você pode fazer a !ls. Dê uma olhada no seguinte log para ver se é disso que você precisa:

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
Nitin Venkatesh
fonte
1
Isso executa o comando sem exibi-lo. Existe uma alternativa que o exibe como o OP solicitado?
Bruno Pereira
No zsh, você pode setopt HIST_VERIFYe o comando será colocado no seu buffer de entrada, onde você pode pressionar enter para aceitá-lo ou editá-lo.
poolie
1

O histórico está localizado ~ / .bash_history Além disso, para obter um truque interessante para pesquisar seu histórico do bash, pressione ctrl + r e digite o início do comando que você está procurando.

e http://ubuntuforums.org/showthread.php?t=204382 para aliases e truques úteis da linha de comando

Ringtail
fonte