环境
Linux version 2.6
Screen version 4.03.01
我在屏幕会话中运行一个应用程序。该程序打印到 STDOUT 并从 STDIN 读取。
我想要做的事情:
首先,将 'd 的 STDOUTscreen
tee
写入文件。出于某种原因,管道到 tee 只写入前几行,然后停止。这可能是因为我正在执行的 shell 脚本运行了其他应用程序/shell 脚本... 有没有办法连接到屏幕会话的 STDOUT?
其次,我想创建一个文件,比如 fifo?我可以在其中写入数据,并让其将数据发送到屏幕会话的 STDIN。
我愿意接受其他建议,比如screen
根本不使用,做nohup
一些事情,fifo
一些
基本上,我想让一个应用程序处于后台,并有一个文件用于输出,另一个文件用于将输入重定向到。
答案1
基本上,我想让一个应用程序处于后台,并有一个文件用于输出,另一个文件用于将输入重定向到。
如果是这种情况,那么(1)我们需要后台运行application
并将其输出发送到文件file
:
application >file &
并且,(2)我们需要将应用程序的输出添加到命令中another
:
tail -f | another
例子
让我们创建一个示例application
并another
:
$ application() { while sleep 1; do date; done; }
$ another() { grep 2017; }
现在,让我们application
从背景开始:
$ application >file &
[1] 5989
然后,让我们another
在前台运行:
$ tail -f file | another
Sat May 20 18:32:05 PDT 2017
Sat May 20 18:32:06 PDT 2017
Sat May 20 18:32:07 PDT 2017
Sat May 20 18:32:08 PDT 2017
Sat May 20 18:32:09 PDT 2017
Sat May 20 18:32:10 PDT 2017
[...clip...]
在 Screen 会话中使用 FIFO
首先,启动 screen 会话。然后运行:
$ mkfifo fifo
$ application >fifo &
[1] 8129
$ cat fifo | another
Sat May 20 18:50:39 PDT 2017
Sat May 20 18:50:40 PDT 2017
Sat May 20 18:50:41 PDT 2017
Sat May 20 18:50:42 PDT 2017
Sat May 20 18:50:43 PDT 2017
Sat May 20 18:50:44 PDT 2017
Sat May 20 18:50:45 PDT 2017
Sat May 20 18:50:46 PDT 2017
[...snip...]
(我使用cat fifo | another
它来与第一个tail -f
版本并行。
cat
在这里是不必要的。我们可以使用another <fifo
。)