Linux - Evite cat: não existe tal arquivo ou diretório quando o arquivo não existe

2

Estou verificando por meio de um script bash se um processo está sendo executado com base no PID armazenado em um arquivo. Eu recebo o erro mostrado acima quando o arquivo não existe como o comando está tentando acessar o arquivo e verifique se o PID está realmente lá, então é normal, mas eu gostaria de evitá-lo se possível.

Existe tal maneira?

O comando que estou usando pode ser encontrado abaixo.

se matar -0 $ (cat "$ pid_file")

Obrigado antecipadamente.

    
por croussou 22.06.2015 / 15:29

3 respostas

2

[[ -f "$pid_file ]] && (cat "$pid_file" | head -n 1 | tr -d "\n")

Este comando retornará um status diferente de zero. Se você quer um "sempre retorne zero" (sacrificando legibilidade):

[[ ! -f "$pid_file ]] || (cat "$pid_file" | head -n 1 | tr -d "\n")

    
por 22.06.2015 / 15:52
2

Você precisa de uma condição para verificar se o arquivo existe e, se não quiser ver erros ao tentar kill um PID que não existe mais, redirecione seu stderr para /dev/null . Você vai acabar com algo como:

PID_EXISTS=$([[ -f "$pid_file" ]] && kill -0 $(<"$pid_file") 2> /dev/null && echo 1 || echo 0)

Isso armazenará 1 para um pid existente e 0 para um não existente. Você pode usar a variável em uma comparação, como:

if [[ $PID_EXISTS -eq 1 ]]; then echo FOUND; else echo NOTFOUND; fi

Ou apenas imprima seu resultado:

echo $PID_EXISTS

Não há cat . Miau!

    
por 22.06.2015 / 16:11
1

Ou você pode usar apenas pgrep :

if pgrep -F "$pid_file" &>/dev/null; then
    echo yep
else
    echo nope
fi
    
por 22.06.2015 / 16:41

Tags