Editando a saída do comando como um novo comando

5

Eu tenho um script que gera uma string que gostaria de editar e depois é executado como um comando.

Por exemplo, estou usando

cat ... | xsel -p

E então eu quero editar a saída de 'xsel -op´ e executar a string editada como um novo comando.

Então estou tentando:

cat ... | xsel -p
$(xsel -op) TAB

Mas isso obviamente falha.

Então, como posso produzir o conteúdo de xsel -op (neste caso) para minha linha de comando, editar esse novo comando e depois executar o comando?

Obrigado

    
por simao 10.10.2012 / 11:24

4 respostas

4

Em zshbuiltins :

-z Push the arguments onto the editing buffer stack, separated by spaces.

Para enviar o conteúdo do xsel para sua linha de comando:

print -z $(xsel -op)
    
por 16.10.2012 / 08:45
4

Você pode adicioná-lo ao histórico (pelo menos no bash, não tenho certeza sobre o zsh) fazendo o seguinte

history -s $(xsel -op)

Em seguida, recupere e edite-o.

Eu já descobri que

print -s $(xsel -op)

funciona de maneira equivalente sob zsh

    
por 10.10.2012 / 11:47
3

Em vez de adicioná-lo ao histórico manualmente, basta pressionar a tecla shell-expand-line do bash ( M-C-e ):

   shell-expand-line (M-C-e)
          Expand the line as the shell does.  This performs alias and his‐
          tory expansion as well as all of the shell word expansions.  See
          HISTORY EXPANSION below for a description of history expansion.
    
por 10.10.2012 / 20:51
0

Não tenho certeza do que você está tentando fazer, mas algo assim deve funcionar:

'xsel -op | sed 'do something''

Os backticks farão o BASH executar, neste caso, o que estiver salvo no buffer de seleção principal do X que você acabou de editar usando o sed. Por exemplo:

echo "find . -name foo" | xsel -p
'xsel -op | sed 's/foo/bar/'

Os comandos acima farão com que find seja executado procurando por arquivos ou pastas chamados "bar".

    
por 10.10.2012 / 11:48

Tags