我每60秒运行一次测试,直到测试失败。它工作正常,但我想同时打印“ npm test”的输出。
until npm test | grep -m 1 "fail"; do sleep 60 ; done && say fail
我已经尝试在下一条命令中使用tee,但是它只运行一次循环:
until npm test | tee >(grep -m 1 "fail"); do sleep 60 ; done && say fail
我正在使用OS X。
答案 0 :(得分:1)
您可以尝试
until npm test | tee /dev/stderr | grep -m 1 "fail"; do sleep 60 ; done && say fail
npm测试的输出发送到stderr。因此,相同的文本输入stdout和stderr。 stdout由grep处理,stderr打印到终端。
答案 1 :(得分:0)
exec 3>&1;
until npm test | tee >(cat >&3) | grep -q -m 1 "fail"; do sleep 60 ; done && say fail
exec
打开带有数字3
的新文件描述符,它将其输出重定向到文件描述符1
,即标准输出。
然后在until
条件下,我们将tee
的输出{{3}}到文件描述符3中。
您可以变得聪明,并保存cat
s:
exec 3>&1;
until npm test | tee /proc/self/fd/3 | grep -q -m 1 "fail"; do sleep 60 ; done && say fail