Gostaria de selecionar algo em fzf e digitar essa seleção como comando que posso editar e, eventualmente, invocar. A solução pode ficar assim:
seq 5 | sed "s/^/echo Testing /" | fzf | xargs -I{} xdotool type "{}"
mas a saída no terminal se parece com:
[me@~~~_09:40:22 ~]$ seq 5 | sed "s/^/echo Testing /" | fzf | xargs -I{} xdotool type "{}"
echo Testing 3[me@~~~_09:40:26 ~]$ echo Testing 3
funciona, mas o comando potencialmente longo será impresso duas vezes. É mais como "questão" do xdotool. Ele digita o texto antes de chamar o comando concluído, é por isso que é escrito primeiro, depois o comando é concluído e o que foi escrito é "duplicado" no prompt.
Eu gostaria de saber se de alguma forma é possível iniciar este comando de demonstração para obter apenas:
[me@~~~_09:40:22 ~]$ seq 5 | sed "s/^/echo Testing /" | fzf | xargs -I{} xdotool type "{}"
[me@~~~_09:40:26 ~]$ echo Testing 3
Eu estava tentando brincar com atrasos, comandos aninhados, mas não consigo descobrir isso. Alguém pode ajudar?
Sempre que algo é digitado no terminal, ele é ecoado. Isso é o que estão vendo. Quando o bash é reiniciado, ele define o terminal como raw para lidar com todos os caracteres especiais e edição, etc., e também desativa o eco. Em seguida, ele lê o que
xdotool
foi digitado e o ecoa obedientemente.Você pode contornar isso desligando o echo antes de executar
xdotool
, por exemplo:Observe que, em vez de
xdotool
, você também pode usar ioctlTIOCSTI
. Existem várias fontes C e scripts perl para fazer isso. Aqui está um com ostty
incluído:Se você colocar isso em um arquivo
pushtype
, poderá evitar oxargs
e apenas...fzf|pushtype
.