我正在编写一个 bash 脚本,希望最后一个命令作为单独的进程启动。最后一个命令还会将所有输出发送到一个文件。但是,我还希望输出仍显示在控制台上。到目前为止,我所做的是,
$ command > "file" &
这会将输出发送到“文件”,并将命令作为其自己的进程启动。但是,我还想同时在控制台中查看输出(但如果我按 ctrl+c 或 w/e,命令不会停止)。这很像这个问题,但有一个条件,它需要有自己的线程。
我努力了:
$ command | tee "file" &
但问题是 tee 是该过程的一部分,并且输出实际上并没有出现。
因此,为了澄清起见,我希望有command
自己的进程,将输出发送到文件,但仍让输出出现在控制台中(直到我按下 q、enter、ctrl+c 或其他键)。由于这是在 bash 脚本中,因此可以接受两行单独的代码。
答案1
听起来您想command
完成对文件的写入,但又希望能够中断控制台的显示。我会采取不同的解决方案。在您的脚本中:
> "file"
command > "file" &
tail -n +1 -F "file"
更正:
原始答案使用了-n 0
,它最初不输出 行,"file"
但输出在 开始"file"
后添加到 的任何行tail
。这不是我的本意——这是一个错误。我打算使用一个选项来列出 的所有行,"file"
即使在 开始command
之前已经写了一些tail
。该行为的正确选项是-n +1
。
从tail(1)
手册页中:
-n, --lines=K 输出最后 K 行,而不是最后 10 行; 或者使用 -n +K 输出以第 K 个开头的行
第一行会在发生竞争条件(在tail
之前命中文件)时清除文件的内容command
。