Команда выполняется нормально в терминале, а не в скрипте bash - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь:

#!/bin/bash
if $(ps -C "bm_d21_debug")
then
    kill $(ps -C "bm_d21_debug" -o pid=)
    echo "exists"
fi

Возвращает: "PID: команда не найдена"

Не уверен, что я делаю неправильно?

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Исправлено путем изменения на

if ps aux | grep ./bm_d21_debug | grep -v grep >/dev/null;then
    pid=$(ps aux | grep ./bm_d21_debug | grep -v grep | awk '{print $2}')
    kill $pid
    echo $pid
fi
0 голосов
/ 23 февраля 2019

Рассмотрим эту строку:

if $(ps -C "bm_d21_debug")

Вы выполняете команду ps в подстановке команды, которая возвращает вывод команды.Команда if затем пытается запустить этот вывод как команду .

Первое слово вывода ps - PID, который if будет обрабатывать как имя команды.Таким образом, ошибка «команда не найдена».

Вы просто хотите

if ps -C "bm_d21_debug" >/dev/null; then
    echo running
else
    echo NOT running
fi
0 голосов
/ 23 февраля 2019

Предлагаю также использовать квадратные скобки:

if [[ $(ps -C "bm_d21_debug") ]]

Но эта команда всегда будет возвращать "да" ($? = 0)

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