假设您以这种方式运行可执行文件:
$ echo <params> | <process>
如果process
不是作为管道运行,那么您键入$ process &
它就会保持运行。上面的命令行需要什么才能process
持久启动?
更新:
更准确地说,w3mimgdisplay
可以作为持久进程运行,这就是w3m
滚动后保持图像显示在终端上的方式。如何从命令行以这种方式运行该程序?
echo -e '0;1;0;0;0;0;0;0;0;0;file.png\n4;\n3;' | /usr/lib/w3m/w3mimgdisplay
答案1
看来你需要命名管道:
https://askubuntu.com/questions/449132/why-use-a-named-pipe-instead-of-a-file
基本上,您创建一个命名管道,运行从命名管道获取输入的进程,然后将您想要的任何内容传递给命名管道,以便该进程处理它。
例如:
mkfifo /tmp/namedpipe
tail -f /tmp/namedpipe &
echo "BOO"> /tmp/namedpipe
echo "this" > /tmp/namedpipe
...这将(尾部)回显发送到 /tmp/namedpipe 的所有内容到标准输出。
我使用tail而不是cat,因为cat收到EOF时就会退出进程。
UPD。澄清。
要将其传递给您的流程,您需要执行以下操作:
tail -f /tmp/namedpipe | yourprocess &
UP2。所以在你的情况下,顺序将是这样的:
mkfifo /tmp/namedpipe
--- 这将是您可以将数据发送到进程的入口点。
tail -f /tmp/namedpipe | /usr/lib/w3m/w3mimgdisplay &
-- 然后,这将创建您想要的持久进程,并且将来会向您通过管道发送的任何内容提供信息。
echo -e '0;1;0;0;0;0;0;0;0;0;file.png\n4;\n3;' > /tmp/namedpipe
应该在屏幕上向您显示图像。
从现在开始,您将发送到 /tmp/namedpipe 的任何其他内容都将像回显到命令的新行一样,并且同样应该显示在屏幕上。