Я шукаю просту перевірку оболонки (+ curl), яка оцінила б як істинне чи хибне, якщо URL-адреса існує (повертає 200) чи ні.
Відповіді:
Використання --fail
зробить статус виходу ненульовим при невдалому запиті. Використання --head
дозволить уникнути завантаження вмісту файлу, оскільки він нам не потрібен для цієї перевірки. Використання --silent
дозволить уникнути випуску стану або помилок самою перевіркою.
if curl --output /dev/null --silent --head --fail "$url"; then
echo "URL exists: $url"
else
echo "URL does not exist: $url"
fi
Якщо ваш сервер відхиляє запити HEAD, альтернативою є запит лише на перший байт файлу:
if curl --output /dev/null --silent --fail -r 0-0 "$url"; then
-r 0-0
запиту лише першого байта файлу. Я відповідно змінив відповідь.
return 0
і return 1
для truthiness і falsiness, а не використовувати стандартний висновок для повернення true
і false
як рядки. Таким чином, хтось може запустити:, if existURL "$url"
без зайвих (неефективних) накладних витрат на спроби захопити його stdout і інтерпретувати те саме.
Я вважаю, що wget є кращим інструментом для цього, ніж CURL; є менше варіантів, які слід запам’ятати, і ви насправді можете перевірити на істинність значення в bash, щоб побачити, чи вдалося це за замовчуванням.
if wget --spider http://google.com 2>/dev/null; then
echo "File exists"
else
echo "File does not exist"
fi
В --spider
опції робить Wget просто перевірити на файл , а не завантажуючи його, і 2> /dev/null
замовчування Wget'S STDERR вихід.
--fail
цього можна зробити те ж саме з завиванням.
wget google.com/asdf
і curl google.com/asdf
. curl
повертає EXIT_SUCCESS за замовчуванням при виникненні помилки 404, тоді як wget
повертає EXIT_FAILURE.
--spider
аргумент: він wget
повертається після перевірки існування файлу, а не завантаження.
-o /dev/null
для придушення друку заголовка на stdout