Похожие вопросы

Записать импортируемый массив в файл в Bash?
Использование Windows Git Bash в MobaXterm
Что мне нужно сделать, чтобы смонтировать USB-накопитель в ArchLinux
Запуск jpegoptim в cronjob раз в неделю, на CentOS из cPanel, только для файлов, добавленных в течение прошлой недели?
Создать ярлык для папки с пробелами и дефисами
Попытался установить ZSH через cygwin, а затем попытался использовать zsh через Cmder
Как переместить курсор командной строки на bash с помощью мыши
Нет такого файла или каталога после ввода $PATH в терминале
WSL / Bash в Windows 10: не удалось создать пользователя UNIX, возвращен код ошибки 10
Можно ли задать wget для отображения времени передачи в миллисекундах?
как использовать xmllint для получения значения из xml
Я добавил новый путь в список путей, но не смог выполнить программу из любого места linux
/dev / dsp отсутствует в debian и не слышит фестивальных звуков
невозможно выполнить: слишком много уровней символьных ссылок
Хранилище Bash в Windows 10

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

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

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

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

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

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

5
задан croussou
источник

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 2015-06-22 13:52:53
источник

необходимо условие, чтобы проверить, существует ли файл, и если вы не хотите видеть какие-либо ошибки при попытке 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 2015-06-22 15:59:09
источник

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

if pgrep -F "$pid_file" &>/dev/null; then
    echo yep
else
    echo nope
fi
1
отвечен cYrus 2015-06-22 14:41:37
источник

Другие вопросы bash linux