繁体   English   中英

bash将gulp输出监视到多个文件,然后使用tail -f显示输出

[英]bash output gulp watch to multiple files then show output with tail -f

在centos 6虚拟框中,我尝试在多个目录上运行gulp watch ,将其输出到2个文件。 一个文件用于每个目录,另一个文件用于所有目录。 因此,采用以下数组;

directories=(
    'local.site1.com'
    'local.site2.co.uk'
)

我想循环浏览一下,然后总共创建3个文件。

  1. local.site1.com-gulp.log
  2. local.site2.co.uk-gulp.log
  3. all-gulp.log

如果我对站点1中的文件进行更改,则更改将记录在site1.log和all-gulp.log中,然后对于站点2相同,它应记录到site2.log和all-gulp.log。 因此,每个站点都有单独的日志,但是我可以在一个文件中看到所有站点的输出。 所有文件都应附加日志。

有了这个单一文件后,我希望能够运行命令tail -f /path/to/all-gulp.log以便可以看到在两个目录上运行的该进程的实时输出。

我的尝试如下

#!/bin/bash

directories=(
    'local.site1.com'
    'local.site2.co.uk'
)


for dir in ${directories[@]}
do
    cd /var/www/$dir
    gulp watch | tee -a /var/log/gulp/$dir-gulp.log /var/log/gulp/all-gulp.log

done

tail -f /var/log/gulp/all-gulp.log

更新上面已被修改。 使最后一行成为tail -f命令(我发誓,我已经尝试过了)确实为我提供了该进程的运行输出,但是仍然没有迹象表明站点2会发生任何事情。当我保存文件时,没有创建文件,也没有输出运行在站点2上(文件应触发编译)

使用单个bash脚本,我什至可以尝试吗?

如果您真的想要,使用Bash脚本可以进行任何操作。

我可能会弄错,但似乎您忘记了并行运行进程。 第二个进程没有运行,因为Bash只是在等待第一个进程完成(它从来没有这样做)。

尝试在tee命令的末尾添加&以并行启动进程,并在循环后阻塞之前wait命令,直到它们全部完成为止。

编辑:我不确定要并行执行tee追加到同一文件。 如果在两侧同时修改文件,则可能会出现争用情况。 您可能需要查看parallel命令来处理来自并行进程的缓冲输出。

正如Marc所指出的那样,您可能需要一个&来在后台运行gulp 我没有安装gulp因此无法测试您的代码。 你可以得到什么更好的处理&通过比较这个脚本的作用:

while true; do                                                           
    sleep 1                                                              
    echo -n 0                                                               
done                                                                    
while true; do                                                           
    sleep 1                                                              
    echo -n 1                                                               
done   

将只输出0 s,输出为:

while true; do                                                           
    sleep 1                                                              
    echo -n 0                                                               
done &        # <--- Note '&' in this line will run first while-loop on background                                                                   
while true; do                                                           
    sleep 1                                                              
    echo -n 1                                                               
done  

这将打印01

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM