Como eu posso ecoar tanto comandos executáveis quanto seqüências de controle para um pipe nomeado?

0

Eu tenho um pipe nomeado:

> ls -l
total 0
prw-r--r--  1 ivan  staff  0 Aug 24 08:32 fifo

Em um terminal, leio em um loop infinito:

> while true; do sh -c "$(cat fifo)"; done
█

Em outro, escrevo comandos executáveis para o pipe:

> echo 'rspec path/to/example_spec.rb' > fifo

Meu primeiro terminal executa o comando:

> while true; do sh -c "$(cat fifo)"; done
.........

Finished in 0.00194 seconds (files took 0.10327 seconds to load)
9 examples, 0 failures

█

Agora, gostaria de enviar uma sequência de controle para alterar a forma do cursor de para _ . No segundo terminal, eu corro:

> printf '\e[4 q' > fifo

Mas o terminal de leitura reporta um erro ilegível (note o "c" em falta no "comando"):

sh: ommand not found

Eu tentei \e , 3 , ^[ e x1B , mas tudo sem sucesso. Eu também tentei usar echo , mas estou no OSX, e o eco BSD não possui a opção -e .

Como posso enviar a sequência de controle com o escape correto?

    
por ivan 24.08.2016 / 15:03

1 resposta

1

O sh é redundante se você pretende enviar apenas seqüências de escape e texto via fifo. Você poderia fazer exatamente isso:

while true; do cat fifo; done
    
por 24.08.2016 / 22:31