linux - bash 输出 gulp watch 到多个文件,然后用 tail -f 显示输出

标签 linux bash gulp centos

在 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 命令来处理来自并行进程的缓冲输出。

关于linux - bash 输出 gulp watch 到多个文件,然后用 tail -f 显示输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49898758/

相关文章:

linux - 跨机器跟踪 pids (ssh)

linux - Google Cloud Storage - GSUtil - 复制文件,跳过现有文件,不覆盖

node.js - 如何解决以下 browserify 错误?

PHP - 获取网关/路由器 IP、UPnP

c - 到达一定时间后杀死子进程

bash - 如何为 bash 详细模式设置前缀

linux - Linux 下批量音乐目录重命名脚本/命令 (bash)

linux - bash 案例复合模式不起作用

javascript - 如何处理来自 gulp-babel 的 'code generator has deoptimised styling' 消息

javascript - 具有动态名称的文件夹的压缩内容