Se você quiser manter o set -e
, você precisa evitar que o pgrep falhe:
MASTER_PID='pgrep -f '^([^ ]*/)?puma ' || true'
Estou usando o CentOS 7. Estou tentando capturar o "mestre PID" de um processo em uma variável de script. Este é o meu script
#!/bin/sh
set -e
PID="$APP_ROOT/shared/pids/puma.pid"
echo "before ..."
MASTER_PID='pgrep -f '^([^ ]*/)?puma ''
echo "after ..."
xxx
No entanto, a palavra "depois de ..." nunca é impressa. Há algo sobre essa linha
MASTER_PID='pgrep -f '^([^ ]*/)?puma ''
que está fazendo com que as coisas se comportem mal, especialmente se não houver nenhum processo do puma em execução. Alguém sabe uma maneira de reescrever o acima para que eu possa capturar meu PID mestre ou pelo menos permitir que a execução passe para a próxima linha se ela não existir?
set -e
Sair imediatamente se um comando sair com um status diferente de zero.
Como pgrep
falha quando não há PID
correspondente, você não pode executar a instrução echo "after"
.
Acho que remover set -e
deve resolver seu problema.
Tags process shell centos shell-script