Mantendo o bash aberto em um pipe nomeado

3

Eu estou olhando para enviar comandos para um painel tmux separado do vim e eu percebi que a maneira mais fácil era mkfifo um pipe nomeado /tmp/cmds e executar bash < /tmp/cmds para ouvir os comandos para executar.

Eu então faço echo "echo \"hello world\" > /tmp/cmds" como teste, isso só funciona para um comando e o xargs fecha imediatamente. Existe alguma maneira de manter isso em execução depois de mais de um comando?

    
por William Casarin 09.08.2012 / 18:21

2 respostas

1

isso não é diferente de executar xargs no shell interativo e terminar com uma nova linha, para que ele seja finalizado e finalizado.

você teria que escrever um loop e executar para cada linha de entrada de stdin como

enquanto:; do xargs < / tmp / cmds; feito

não foi testado, portanto você pode precisar ajustar.

    
por 09.08.2012 / 18:29
0

Se alguém estava pensando, aqui está o script que eu uso para enviar comandos do vim:

#!/bin/sh
FIFO=${1:-"/tmp/cmds"}
mkfifo $FIFO &> /dev/null
while :; do bash < $FIFO && echo "== OK ==" || echo "!! ERR !!"; done

Aqui está uma função vim para enviar comandos para este pipe:

function! RCmd(cmd)
  :silent! exe '!echo "cd ' . getcwd() . ' && ' . a:cmd . '" > /tmp/cmds'
  :redraw!
endfunction

Um mapeamento que envia make para a janela em <F4>

map <F4> :call RCmd("make")<CR>

Divirta-se!

    
por 15.04.2013 / 16:01