Проблемы с доступом к PID задания в LINUX shellscript - PullRequest
0 голосов
/ 04 февраля 2020

если я запускаю выражение

ps -fu $USER| grep 'mount' | grep -v 'grep' | awk '{print $2}'

в командной строке, я получаю - как и ожидалось - PID процессов, содержащих "mount" в их описании.

Я хочу добиться следующего, чтобы программно убить определенные фоновые процессы. Следующий код в скрипте оболочки:

#!/usr/bin/env bash
mountcmd="ps -fu $USER| grep 'mount' | grep -v 'grep' | awk '{print $2}' "
mountpid=$(eval "$mountcmd")
echo "Found existing background job PID: " "$mountpid"

не предоставляет PID, но вывод echo:

Found existing background job PID:  wgeithne  6284     1  0 17:09 pts/3    00:00:00 minikube mount /u/wgeithne/bin/grafana/config:/grafana

Как получить только PID в качестве вывода мой сценарий?

1 Ответ

3 голосов
/ 04 февраля 2020

Глупый трюк eval требует дополнительного экранирования знака доллара в скрипте Awk. Но на самом деле, чрезвычайно превосходное решение - избежать глупых eval трюков.

Возможно, посмотрите также https://mywiki.wooledge.org/BashFAQ/050

Если вам действительно нужно заново изобрести pidof, возможно избавиться от антипаттернов.

mountpids=$(ps -fu "$USER" | awk '/[m]ount/ { print $2 }')
...