我想在bash中使用以下命令:
sdx <- sd(nd$x) * 2.5 + mean(nd$x)
sdx1 <- sd(nd$x) * -2.5 + mean(nd$x)
library(tidyverse)
nd %>% filter(x < sdx, x > sdx1) %>% .$x %>% hist
不幸的是,直到完成为止(例如,通过杀死sleep命令的ppid),文件(while true; do date; sleep 1;done) | tee out.out 2>&1 | grep ^[A-Z] >log.log 2>&1 &
为空,但文件log.log
具有预期的内容。
答案 0 :(得分:1)
为了解决此问题,您需要使grep
行缓冲。这可能取决于实现方式,但是取决于BSD grep(Mac OS X附带),您只需要将--line-buffered
选项添加到grep
:
(while true; do date; sleep 1;done) | tee out.out 2>&1 | grep --line-buffered ^[A-Z] >log.log 2>&1 &
在grep
手册页中:
--line-buffered
Force output to be line buffered. By default, output is line buffered when standard output is a terminal and block buffered otherwise.
您实际上可以通过输出到STDOUT来验证该行为:
(while true; do date; sleep 1;done) | tee out.out 2>&1 | grep ^[A-Z] 2>&1 &
在这种情况下,您不需要显式地按行缓冲,因为这是默认设置。但是,当您重定向到文件时,必须显式设置该行为。