Linux-Avoid cat: нет такого файла или каталога, когда файл не существует

Я проверяю с помощью сценария bash, выполняется ли процесс на основе PID, хранящегося в файле. Я получаю ошибку, показанную выше, когда файл не существует, поскольку команда пытается получить доступ к файлу и проверить, действительно ли PID там, так что это нормально, но я хотел бы избежать этого, если это возможно.

есть ли такой способ?

команда, которую я использую можно найти ниже.

Если убить -0 $(кошка "$pid_file")

спасибо предварительный.

9
задан croussou
02.01.2023 8:29 Количество просмотров материала 2984
Распечатать страницу

3 ответа

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

эта команда вернет ненулевое состояние. Если вы хотите "всегда возвращать ноль" (жертвуя удобочитаемостью):

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

2
отвечен Felipe Lema 2023-01-03 16:17

необходимо условие, чтобы проверить, существует ли файл, и если вы не хотите видеть какие-либо ошибки при попытке kill PID, который больше не существует, перенаправить его stderr to /dev/null. Вы получите что-то вроде:

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

это позволит сохранить 1 для существующего pid и 0 для несуществующего. Вы можете использовать переменную в сравнении, например:

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

или просто выведите его результат:

echo $PID_EXISTS

No cat. Мяу!

2
отвечен jweyrich 2023-01-03 18:34

или, вы можете просто использовать pgrep вместо:

if pgrep -F "$pid_file" &>/dev/null; then
    echo yep
else
    echo nope
fi
1
отвечен cYrus 2023-01-03 20:51

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх