Halten Sie die Bash auf einer Named Pipe offen

1757
William Casarin

Ich schaue, um Befehle von vim an einen separaten tmux-Bereich zu senden, und ich dachte mir, der einfachste Weg wäre, eine Named Pipe zu mkfifo /tmp/cmdsund zum Ausführen bash < /tmp/cmdsvon Befehlen zu lauschen.

Ich mache es dann echo "echo \"hello world\" > /tmp/cmds"als Test, dies funktioniert nur für einen Befehl und xargs wird sofort geschlossen. Gibt es eine Möglichkeit, dies nach mehr als einem Befehl auszuführen?

3

2 Antworten auf die Frage

1
johnshen64

Dies unterscheidet sich nicht vom Ausführen von xargs auf der interaktiven Shell und endet mit einem Zeilenumbruch, sodass es beendet und beendet wird.

Sie müssten eine Schleife schreiben und für jede Eingabezeile von stdin ausführen, wie z

während:; xargs </ tmp / cmds; erledigt

nicht getestet, so dass Sie möglicherweise optimieren müssen.

0
William Casarin

Wenn sich jemand gefragt hat, hier das Skript, das ich zum Senden von Befehlen von vim verwende:

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

Hier ist eine Vim-Funktion, um Befehle an diese Pipe zu senden:

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

Eine Zuordnung, die makean das Fenster sendet<F4>

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

Habe Spaß!