如何将 `watch` 作为后台作业运行?

Jul*_*usz 21 command-line shell tty watch background-process

当我运行时:

watch 'cmd >> output.txt' &
Run Code Online (Sandbox Code Playgroud)

作业被系统暂停:

3569 停止(tty 输出)

有解决方法吗?

Mic*_*zek 25

目的watch是全屏显示命令的结果并不断更新;如果您将输出重定向到一个文件并将其作为背景,那么首先真的没有理由使用 watch。

如果您只想在延迟watch的情况下一遍又一遍地运行命令(默认情况下等待两秒钟),您可以使用以下内容:

while true; do
    cmd >> output.txt
    sleep 2
done
Run Code Online (Sandbox Code Playgroud)


mik*_*elo 17

更新,感谢@SDK:

watch -n 1 'date | tee -a output.txt' &>/dev/null &
Run Code Online (Sandbox Code Playgroud)

tee 非常有用,可以将输出推送到指定的文件。

上一个答案:

这里有一个方法:

watch -n 1 'date' &>/dev/null &
Run Code Online (Sandbox Code Playgroud)

由于您对进程进行了后台处理,我们可以假设您不需要终端显示并且您可以重定向到文件。如果你这样做,你将能够watch毫无问题地背景。

sleep,正如 Michael Mrozek 所建议的那样,会慢慢滞后,这可能是不可取的。除了监视系统时间并根据经过的时间执行命令的复杂 shell 脚本之外,watch -p它也是精确计时的好选择。

精确计时:

watch -n 1 -p 'date' &>/dev/null &
Run Code Online (Sandbox Code Playgroud)


Sté*_*nez 11

我不确定你的动机,但这也许就足够了?

while true; do sleep 2; cmd >>output.txt; done &
Run Code Online (Sandbox Code Playgroud)

否则,请解释您为什么真正需要watch.