如何将可运行命令和控制序列回显到命名管道?

如何将可运行命令和控制序列回显到命名管道?

我有一个命名管道:

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

在一个终端中,我以无限循环的方式读取它:

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

在另一个例子中,我将可运行的命令写入管道:

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

我的第一个终端运行命令:

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

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

现在我想发送一个控制序列来将光标形状从 更改_。在第二个终端中,我运行:

> printf '\e[4 q' > fifo

但读取终端报乱码(注意“command”中少了“c”):

sh: ommand not found

我尝试过、、、\e但都无济于事。我也尝试过使用,但我使用的是 OSX,而​​ BSD echo 没有选项。\033^[x1Becho-e

如何发送正确转义的控制序列?

答案1

sh如果您只想通过 fifo 发送转义序列和文本,则这是多余的。你可以这样做:

while true; do cat fifo; done

相关内容