2015-08-13 68 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"