Функция регулярного выражения Bash pgrep - PullRequest
0 голосов
/ 05 июня 2018

Я хочу создать bash-скрипт, который будет проверять, запущен ли foo, и запускать его, если это не так.

Вот код:

#!/usr/bin/env bash

function run {
 if ! pgrep $1;
 then
  $@
 fi
}
run foo

После выполненияскрипт запускает другой экземпляр foo, несмотря на то, что foo уже запущен.

pgrep foo возвращает номер процесса, чтобы я мог сначала заставить скрипт убить его, а затем снова запустить foo, но я хочу знать, можно ли это сделать, как описанонаверху.Что мне здесь не хватает?

1 Ответ

0 голосов
/ 05 июня 2018

Несколько улучшений:

function run {
    if ! pgrep -x "$1" >/dev/null
    then
        "$@"
    fi
}
run foo bar "baz qux"

примечания:

  1. цитата все ваши переменные.Это будет поддерживать любые слова, содержащие пробелы.
  2. перенаправить вывод из pgrep
  3. , используя опцию -x pgrep, чтобы ограничить поиск процессов с именем"foo", так какв отличие от процессов , содержащих"foo"

Вы можете сократить это значение до

run() { ! pgrep -x "$1" >/dev/null && "$@"; }

Мы могли бы написать pgrep -x "$1" >/dev/null || "$@", но это вернет статус успешного завершенияесли процесс уже запущен, и я думаю, что имеет смысл возвращать состояние ошибки, если процесс не может быть запущен.

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