Я не смог проверить это с другими версиями grep
, кроме GNU grep, но там также
grep -e -r
работает как «маскировка» -r
; это может работать и с другими версиями (в отличие от -
).
Основная путаница возникает из-за того, что ваш конвейер ps | grep
соответствует имени вашего скрипта, который включает строку upmpdcli
.
С pgrep
у вас не будет той же проблемы, поскольку pgrep
будет смотреть на имена команд только по умолчанию и не будет ошибочно принимать upmpdcli-check
за upmpdcli
.
В идеале вы должны использовать
pgrep -x /usr/bin/upmpdcli
, чтобы получить PID для этого процесса.
Чтобы убить этот процесс или эти процессы, используйте
pkill -x /usr/bin/upmpdcli
То есть,не не используйте PID из pgrep
(, так как они могут быть устаревшими ).
Чтобы убить только самый старый upmpdcli
процесс, используйте pkill
с -o
и используйте -n
для уничтожения только самого нового. См. руководство pkill
.
Также обратите внимание, что
variable=$( echo `somecommand` )
лучше писать как
variable=$( some_command )
если вы не полагаетесь на тот факт, что оболочка будет выполнять разбиение слов и расширение имени файла на результатsome_command
(вы не ).