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)
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
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)
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
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.
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".