Ob eine URL (http, ftp) erreichbar ist, ist schnell überprüft:
curl --head --fail --silent --output /dev/null www.google.at
(Original von http://stackoverflow.com/a/12199125/841033)
Der Reihe nach:
curl --head http://test.url
Das Programm curl
holt sich nur die Kopf-Daten der URL, ohne die Daten selbst anzufordern. Das reicht, um herauszufinden, ob eine URL gültig ist, oder nicht. Die erste Zeile gibt bei http URLs z.B. den Status Code ("HTTP/1.1 200 OK
" oder "HTTP/1.1 404 Not Found
").
Bei FTP URLs gibt uns curl
entweder Informationen über die Datei, oder einen Fehlercode.
curl --head --fail http://test.url
Mit --fail
können die Ausgabe im Fehlerfall reduzieren. Der Unterschied zeigt sich vor allem bei HTTP Anfragen. Hier wird die Ausgabe einzeilig, z.B.
curl --head --fail www.google.at/notExistingURL
curl: (22) The requested URL returned error: 404
curl --head --fail www.google.tld
curl: (6) Couldn't resolve host 'www.google.tld'
Für noch besseren Script-Support, unterdrückt die Option --silent
jegliche Fehlermeldung. Einzig der Returncode von curl kann jetzt verraten, warum es nicht geklappt hat (bei Erfolg werden nach wie vor die Kopfdaten ausgegeben):
curl --head --fail --silent www.google.tld; echo $?
6
curl --head --fail --silent www.google.at/notExisting; echo $?
22
Jetzt müssen wir nur noch die Ausgabe im Erfolgsfall unterdrücken. Dazu schicken wir den regulären Output mit --output /dev/null
ins Nirvana:
curl --head --fail --silent --output /dev/null www.google.at; echo $? 0
curl --head --fail --silent --output /dev/null www.google.tld; echo $? 6
Wer seine Scripte mit Fehlermeldungen garnieren will, dem sei aber lieber folgendes angeraten:
eval "$({ stderr=$({ stdout=$(curl --fail --head www.google.at); ret=$?; } 2>&1; declare -p stdout ret >&2); declare -p stderr; } 2>&1)";
Details dazu hier: https://www.psit.at/blogs/peter-schmidt/20150729-shell-one-liner-stdout-...
- Blog von Peter Schmidt
- 3587 Aufrufe