проблема с запуском пакетного скрипта, чтобы убить процесс - PullRequest
1 голос
/ 13 марта 2011

Я использую следующий скрипт в командной строке, чтобы убить гипотетический процесс блокнота (используя KornShell (ksh) в Windows XP, если это имеет значение):

kill $ (список задач | grep -i notepad.exe | awk '{print 2}')

Теперь я беру эту строку и помещаю ее в пакетный файл c: \ temp \ testkill.bat, думая, что я должен также быть в состоянии завершить процесс, запустив пакетный файл. Однако, когда я запускаю командный файл, я получаю следующую ошибку awk по поводу несбалансированных скобок:

C: / Temp> ./testkill.bat

C: \ Temp> kill $ (список задач | grep -i notepad.exe | awk '{print $ 2}')
awk: unbalanced () Контекст:
>>> {print $ 2}) <<< <br> C: / Temp>

Так что я озадачен тем, почему я получаю эту ошибку о несбалансированных скобках, когда я запускаю этот сценарий через командный файл, но у меня нет проблем, когда я запускаю команду непосредственно из командной строки?

(я не обязательно привязан к такому способу уничтожения процесса - мне также интересно, почему я пишу в командной строке следующее:

список задач | grep -i notepad.exe | awk '{print $ 2}' | убить

Идентификатор процесса, который получается из вызовов списка задач / grep / awk, похоже, неправильно передан для уничтожения.

1 Ответ

2 голосов
/ 13 марта 2011

Почему вы делаете командный файл, если у вас есть оболочка Korn? Напишите сценарий оболочки - это, вероятно, очень вам поможет.

Я могу ответить на ваш последний вопрос - kill не берет PID для уничтожения со стандартного ввода, он принимает его в командной строке. Вы можете использовать xargs, чтобы заставить его работать:

tasklist | grep -i notepad.exe | awk '{print $2}' | xargs kill
...