iPython Like Histórico de Comando para Shell

22

Para aqueles que não fazem programação python no Ubuntu, o ipython é um shell python com esteróides, mas ele tem esse recurso incrível que não só faz autógrafos com base em nomes conhecidos (ou seja, da mesma forma que o bash faz quando você pressiona aba), mas se você começar a digitar um comando e pressionar para cima, ele não irá percorrer todo o histórico (como o bash), mas apenas através dos comandos recentes que começaram com a mesma seqüência de letras.

Então, se você fez algum comando longo como scp -r -P 8000 -l user server.com:~/dir/to/copy ./ , seguido por vários outros comandos. Se você começou a digitar scp e pressionou, o bash exibiria o comando mostrado antes, em vez de apenas percorrer todo o histórico.

Existe uma extensão como essa para o bash? ou existe algum shell que ofereça esse tipo de recurso?

    
por crasic 09.11.2010 / 22:54

3 respostas

23

O Bash também tem esse recurso, mas não está ativado por padrão. Você pode vinculá-lo ao cursor para cima / baixo colocando isto em ~/.inputrc :

"\e[A": history-search-backward
"\e[B": history-search-forward

Eu prefiro ligá-lo ao Ctrl + up / down:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

edit: Para preservar ctrl + left e ctrl + right para voltar e avançar em palavras inteiras, inclua também estas linhas em ~/.inputrc file:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
    
por ak2 10.11.2010 / 00:52
7

Tente pressionar Ctrl + R e digite algumas letras. Ele funciona na ordem inversa também.

    
por mgunes 09.11.2010 / 23:07
6

E não se esqueça dos fantásticos atalhos de expansão da história no bash. 1

Estou postando alguns trechos da manpage, no caso de você não ter tatuado no seu braço (ou memorizado).

   Event Designators  
       An event designator is a reference to a command line entry in the  his‐
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for '!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ''!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Eu freqüentemente uso a capacidade de me referir à última 'palavra' do comando anterior. Por exemplo,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

Em ambos os casos, o !$ corresponde a /foo/shmoo/adir.horribilus.foo .

1 ... que foram tirados do csh. Para mitigar o escopo do roubo de recursos do bash, a página man bash diz

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Então, é "similar". Qualquer um desses itens pode resultar em csh ou tcsh . Ou qualquer csh descendente que você não está usando devido ao fato de que não é tão maravilhoso quanto bash .

    
por belacqua 09.02.2011 / 18:57