我想用BASH执行一些命令。我的第一个问题是,当CMD Line工作正常时,为什么不执行以下命令。
# Variables
ArchiverLog="/tmp/JSM04-Archiver-GC.log"
Archiver=$(ps -ef | grep 'java' | grep -i 'archiver-component' | awk '{print "jstat -gcutil "$2" 200 10 >> "}')
echo $Archiver
echo $ArchiverLog
Archiver="$Archiver $ArchiverLog"
echo Running jstats For Archiver ...............................
command $Archiver
我尝试过'>>'没有按预期传递,命令也没有运行..
command $Archiver
+ command jstat -gcutil 30467 200 10 '>>' /tmp/JSM04-Archiver-GC.log
+ jstat -gcutil 30467 200 10 '>>' /tmp/JSM04-Archiver-GC.log
invalid argument count
如何通过'>>'成功??
第二个问题,我想为3个不同的进程运行此命令,这是最好的方法,我想同时在parrellel中运行它们,它是3个单独的BASH脚本吗?
感谢。
答案 0 :(得分:0)
这是一种更好的方法。
ArchiverLog="/tmp/JSM04-Archiver-GC.log"
something=$(ps -ef | grep 'java' | grep -i 'archiver-component' | awk '{print $2}')
jstat -gcutil "$something" 200 10 >> "$ArchiverLog"
我不确定$something
是什么;你可以给变量一个更明智的名字。
对于问题的第二部分,您可以在命令末尾使用&
在后台执行命令,然后在末尾使用wait
等待所有后台作业到完整。