2015-08-13 71 views
0

试图运行我认为是BASH脚本内的简单命令,但它似乎正赶上某些事情。我想收集许多Java进程的信息,并追加到单独的文件中。所以我想我会尝试一个,然后扩大,...应该不会太难。Bash脚本运行命令时出现问题

这里的脚本:

#!/bin/bash 
    echo JSTATS from Components 
    # Variables 
WorkflowLog=">> /tmp/jsm04-workflow-gc.log" 
Workflow=$(ps -ef | grep 'java' | grep -i 'workflowcomponent' | awk '{print "jstat -gcutil "$2" 200 10"}') 
echo $Workflow 
echo $WorkflowLog 
echo Running jstats............................... 
command $Workflow $WorkflowLog 

脚本运行时我收到以下错误:

Running jstats............................... 
invalid argument count 
Usage: jstat -help|-options 

所以我是将命令传递不正确或者我应该在一个稍微不同的运行命令行方式?请指教,谢谢。

+0

使用-vx以下调试时,只注意到..我如何通过“>>”,因为我认为这是问题。命令jstat -gcutil 30468 200 10'>>'/tmp/jsm04-workflow-gc.log + jstat -gcutil 30468 200 10'>>'/tmp/jsm04-workflow-gc.log – Boardman411

+0

你试过了awk'{print “jstat -gcutil”$ 2“200 10”}'自己(直接在bash中,没有脚本?)我认为这不会工作,因为你的报价看起来不对 – BadK

+0

工作正常 - 在命令行上。 – Boardman411

回答

0

如果它 - 是变量的问题。

WorkflowLog=$(>> /tmp/jsm04-workflow-gc.log) 
+0

好了,我以为我修好了它,但是我的命令并没有使用第二个变量命令$ variable1 $ variable2 – Boardman411

0

你不能壳结构,如>>存储在一个变量,你的变量Workflow结果的命令,而不是命令行本身的。要执行的代码属于一个函数,而不是文本参数。

你应该组织你的代码是这样的:

#!/bin/bash 
echo JSTATS from Components 
# Variables 
WorkflowLog="/tmp/jsm04-workflow-gc.log" 
Workflow() { 
    ps -ef | 
    grep 'java' | 
    grep -i 'workflowcomponent' | 
    awk '{print "jstat -gcutil "$2" 200 10"}' 
} 

echo Running jstats............................... 
Workflow >> "$WorkflowLog"