как вы можете использовать позиционные аргументы awk в сценарии оболочки - PullRequest
0 голосов
/ 06 апреля 2020

Я использую следующий фрагмент, чтобы внезапно завершить работу любого java процесса:

ps -ef | grep java | grep -v grep | awk "{print $2}" | xargs kill -9

Я хотел бы иметь это в сценарии оболочки, который можно запускать на нескольких машинах, но когда я его помещаю в сценарий и запустить его принимает $ 2 в awk в качестве переданного аргумента. Я пробовал одинарную, двойную и тройную обратную косую черту в $, но ничего не работает.

Одиночный побег приводит к:

can't read "2": no such variable

Двойной побег приводит к:

awk: cmd. line:1 {print
awk: cmd. line:1:      ^ unexpected newline or end of string

Тройной побег в результате:

awk: cmd. line:1 {print
awk: cmd. line:1:      ^ unexpected newline or end of string

Поэтому я ищу способ передачи $ аргументов, которые awk использует в сценарии оболочки

Ответы [ 3 ]

2 голосов
/ 06 апреля 2020

Не могли бы вы попробовать следующее (по вдохновению от @James точный ответ здесь).

ps -ef | awk '/[j]ava/{cmd=(cmd?cmd OFS:"")$2} END{print "kill -9 " cmd}'

Это напечатает только команду kill, и как только вы будете довольны ее результатами (номера pid и c) ) затем выполните следующую команду, чтобы фактически убить пидов.

ps -ef | awk '/[j]ava/{cmd=(cmd?cmd OFS:"")$2} END{print "kill -9 " cmd}' | bash
2 голосов
/ 06 апреля 2020

Как насчет:

$ ps -ef | awk '/[j]ava/{print $2}'

Пример вывода:

28510
1 голос
/ 06 апреля 2020

Есть команда, которая делает это:

pkill java

pkill принимает обозначение -signal (например, -9) точно так же, как kill, но я рекомендую начинать с более слабых сигналов, чтобы выделить время чтобы убитые процессы закрылись должным образом. Я обычно делаю -HUP (зависание, -1), затем стандартный (без флага завершения, -TERM или -15), затем -9 (kill, -KILL).

Если вы хотите чтобы узнать, что это будет делать перед запуском, вы можете перечислить соответствующие идентификаторы процессов с помощью:

pgrep java

или для более подробной информации:

pgrep -a java

(или pgrep java |xargs ps -f, если вы предпочитают)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...