Desenhando interativamente a partir do histórico do bash para construir um comando completo?

1

No prompt do bash, o histórico de comandos pode ser explorado usando as teclas de seta para cima e para baixo. (Eu também uso frequentemente CTRL + R.) É possível fazer isso sem substituir a cadeia de caracteres à esquerda do cursor.

Por exemplo, eu posso ter encontrado dois arquivos usando ls:

$ ls ../../blah/foo/bar/CMakeLists.txt

$ ls /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

Agora gostaria de desviar o segundo caminho para o primeiro arquivo. Eu começo pressionando a seta para cima; depois CTRL + A; e removendo ls do começo usando delete:

$ /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

Gostaria agora de utilizar o > > para acrescentar este caminho ao arquivo CMakeLists.txt; que depois vou editar a partir de um editor de texto. O comando que eu gostaria de criar é:

$ echo /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h >> ../../blah/foo/bar/CMakeLists.txt

Seria bom se eu pudesse rolar de forma interativa através do histórico para localizar o caminho CMakeLists.txt enquanto deixava intocada a parte ... / c ++ config.h.

Uma possibilidade seria usar !! e! designadores de evento -N, mas se possível prefiro muito mais algo interativo; como as setas para cima e para baixo; ou CTRL + R.

    
por user74094 11.07.2013 / 23:52

2 respostas

2

(Eu usarei a nomenclatura chave usada na documentação Readline, a saber, que a chave Control é representada por um C , então C-k is CTRL-K )

Encontre o primeiro com C-r e, em seguida, C-d ou Del 3 vezes para excluir o ls . Então C-k para matar (cortar) o resto da linha. Então, C-r para procurar o outro. C-e para ir para o final da linha. Digite >> . Então C-y para puxar (colar) no primeiro caminho.

Portanto, C-k (kill) e C-y (yank) são provavelmente suas melhores ferramentas para este trabalho.

    
por 12.07.2013 / 00:19
1

Se você estiver familiarizado com o vi, você pode definir o bash para o modo vi com set -o vi e, em seguida, usar comandos vi regulares.

Por exemplo, no seu caso f.y$ para arrancar o caminho na primeira linha de comando, então vá para a próxima linha com j , digite $p para anexar o texto previamente arrancado no final da linha e finalmente limpe a linha com 0cwecho<esc>f a>><esc>

    
por 12.07.2013 / 00:33