2015-08-13 6 views
0

Я хотел бы выполнить несколько команд с помощью BASH. Мой первый вопрос заключается в том, почему следующая команда не выполняется, когда из CMD Line работает нормально.Как выполнить команду из BASH

# 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 

Как передать «>>» успешно ??

Второй вопрос, я хотел бы запустить эту команду для трех разных процессов, что лучший способ сделать это, я хочу запускать их в parrellel в одно и то же время, будет ли это 3 отдельных сценария BASH?

Спасибо.

+0

Вы делаете свою жизнь труднее, чем она должна быть. Просто не добавляйте перенаправление к строке в awk thingy. – Mat

+0

Пробовал удалить это - все еще не удается. – Boardman411

+2

Удалить >> из awk. Не делайте Archiver = "$ Archive Archivelog". В командной части используйте: - команду $ Archiver >> $ Archivelog –

ответ

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 в конце, чтобы дождаться завершения всех фоновых заданий.

Смежные вопросы