[英]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中的文件进行更改,则更改将记录在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
这将打印0
和1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.