考虑以下场景:
创建了一个名为
实际上,如果您运行不会在EOF上终止的进程,则仍然无法使用重定向到该进程的FIFO。我认为这是因为此FIFO被视为关闭状态。
有没有办法解决这个问题?
我遇到这个问题的原因是我想将命令发送到在屏幕会话中运行的我的Minecraft服务器。例如:
创建了一个名为
test
的FIFO。在一个终端窗口(A)中运行cat < test
,在另一个窗口(B)中运行cat > test
。现在可以在窗口B中写入并在窗口A中获得输出。如果您终止进程A并重新启动它,则仍然可以像预期那样使用此设置。但是,如果您终止窗口B中的进程,则B将(就我所知)通过FIFO向进程A发送EOF并终止该进程。实际上,如果您运行不会在EOF上终止的进程,则仍然无法使用重定向到该进程的FIFO。我认为这是因为此FIFO被视为关闭状态。
有没有办法解决这个问题?
我遇到这个问题的原因是我想将命令发送到在屏幕会话中运行的我的Minecraft服务器。例如:
echo“command”> FIFO_to_server
。可能可以仅使用屏幕本身来执行此操作,但我对屏幕不太熟悉,我认为仅使用管道的解决方案将是更简单,更清洁的方法。
tail
等待 EOF,因此它不会逐行传递管道中的内容。 - pabouk - Ukraine stay strongtail -n 1 -f
会跳过在它开始或读取速度比它快的输入。我本意是写tail -n +1 -f
,它可以立即开始输出。 - Gilles 'SO- stop being evil'-n +1
,但它并没有按照我的预期工作。现在你确认这是正确的方法后,我进一步检查了问题,并意识到问题出在tail
的标准输出块缓冲(而不是默认的行缓冲)上。逐行传输的解决方案:stdbuf -oL tail -n +1 -f client_pipe | command
。 - pabouk - Ukraine stay strongminecraft_server <>client_pipe&
。 - phemmer