![](/img/trans.png)
[英]How do I execute a "runuser" command, with arguments, in a bash script?
[英]how do i execute grep chain command in background using bash script
我每天都有24小时日志的数据。 该数据非常庞大,无法grep所需的字符串,因此需要花3个小时在所有24小时dir中搜索该字符串。 为了减少耗时,我决定将24小时分成三个部分,并希望使用&在后台并行执行每个部分
cat test.sh
log1="22 01 02 03 04 05 06 21"
log2="07 08 09 10 11 12 13 22"
log3="14 15 16 17 18 19 20 23"
for me in $log1
do
for me1 in $me
do
cd $me1
$(cat * | grep ASS-va1appus06-1480458532238-14424 | grep -i "am/agent/registered" &) >../log\_$me1 &
cd ..
done
done
这里的问题没有按预期工作。它没有运行后台并且没有更新日志文件,脚本没有进一步处理就出来了。
some of the script output is
+ cd 22
+ cd ..
++ grep ASS-va1appus06-1480458532238-14424
++ grep -i am/agent/registered
++ cat logfile.log1 logfile.log2 .......
如果您看到命令没有按照给定的grep顺序执行,
您错误地设计了paralell调用,并且将paralell的一些代码与在主脚本中进行的调用混合在一起。 您可以尝试以下方法:
#!/bin/bash
log1="22 01 02 03 04 05 06 21"
log2="07 08 09 10 11 12 13 22"
log3="14 15 16 17 18 19 20 23"
for me in $log1
do
for me1 in $me
do
# you could aslo get rid of the cd altogether
# (grep "ASS-va1appus06-1480458532238-14424" $me1/* | grep -i "am/agent/registered" >log\_$me1) &
(cd $me1 && grep "ASS-va1appus06-1480458532238-14424" * | grep -i "am/agent/registered" >../log\_$me1) &
done
done
(...)
表示我们在子shell中执行指令。 诸如变量声明或cd
类的更改在这种情况下有效,但不会影响我们的主脚本环境。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.