bash xterm: como obter linha de comando antes de digitar enter

2

Eu tento definir um comportamento personalizado da função backward-kill-word no bash xterm. Para isso, preciso pegar a linha de comando antes de validá-la. Por exemplo, se eu digitar sdcds/edfdD sdf/sdf sem digitar enter, eu quero usar um atalho como esc + backspace para capturar a linha sdcds/edfdD sdf/sdf em uma variável temporária para aplicar um sed após. Eu já escrevi o sed e o comando bind, mas não consigo encontrar em qualquer lugar como capturar a linha de comando buffer .

Atualização da resposta

Ok, muito obrigado, acho que não estou claro o suficiente na minha explicação. O que eu quero fazer é criar uma função e a chave de ligação relacionada no bash.rc para modificar o texto na linha de comando. Imagine, eu quero definir uma função que remova a linha de comando (antes de digitar enter) até "/" por exemplo e somente até /, eu poderia escrever no meu .bash.rc:

function backward-delete-to-slash () { echo $BUFFER_COMMAND_LINE | sed  's:\(.*[/][/]*).*::';}

bind -x '"\e\d": backward-delete-to-slash'

Meu problema é pegar a linha de comando em uma variável $BUFFER_COMMAND_LINE . Se eu tivesse essa variável, poderia fazer por exemplo:

$: sdffs/dsfd dsfsdf/dfdsf (without typing enter)

esc + retrocesso

$: sdffs/dsfd dsfsdf/

Então, espero ser mais exaustivo.

    
por Michel Xavier 24.10.2011 / 09:43

1 resposta

0

Se você conhece o vi um pouco, tente isto:

$ set -o vi
$ bind vi-yank-to '\ey'
$ type-your-text-here - then press Home to go to begin-of-line, esc-y

A linha está em um buffer agora. Pressione Ctrl-c para obter uma nova linha e, em seguida,

$ sed something-and-then esc-p

O texto do buffer deve aparecer.

    
por 25.10.2011 / 05:47