Primeiro de tudo, comece a usar $() para substituição de comando em vez de mais antigo, problemático ''.
No caso, cat está mostrando a mensagem de erro quando o arquivo não existe no fluxo STDERR (descritor de arquivo 2).
Com o comando susbstution, você está salvando apenas o que está no STDOUT para a variável PID . Então, para se livrar da mensagem de erro quando o arquivo não existe, redirecione o descritor de arquivo 2 para /dev/null :
PID=$(cat /usr/local/foo/var/run/foo.pid 2>/dev/null)
Em zsh e ksh derivadas, você pode usar o atalho para cat :
PID=$(< /usr/local/foo/var/run/foo.pid 2>/dev/null)
Em bash , você pode usar a=$(<file) , mas não a=$(<file 2>/dev/null) .