J’essaie d’obtenir le lien de redirection à partir d’un site en utilisant curl -I
puis grep
à “location”, puis je sed
le texte de l’emplacement pour que je rest avec l’URL.
Mais cela ne fonctionne pas. Il affiche l’URL à l’écran et ne le met pas
test=$(curl -I "http://www.redirectURL.com/" 2> /dev/null | grep "location" | sed -E 's/location:[ ]+//g') echo "1..$test..2"
Qui produit alors:
..2http://www.newURLfromRedirect.com/bla
Que se passe-t-il?
Comme @ user353852 le fait remarquer, vous obtenez un caractère de retour chariot à partir de curl
qui curl
que lorsque vous essayez de faire echo
un caractère après lui. Le pagineur less
montre ceci comme ^ M
Vous pouvez utiliser sed
pour supprimer les “caractères de contrôle”, comme dans cet exemple:
% test=$(curl -I "http://www.redirectURL.com/" 2>|/dev/null | awk '/^Location:/ { print $2 }' | sed -e 's/[[:cntrl:]]//') && echo "1..${test}..2" 1..http://www.redirecturl.com..2
Notes :
J’ai utilisé awk
plutôt que votre grep [...] | sed
approche grep [...] | sed
, sauver un processus.
Pour moi, curl
renvoie l’emplacement dans une ligne commençant par ‘Location:’ (avec un ‘L’ majuscule), si votre version le signale en minuscule ‘l’, vous devrez peut-être modifier l’expression régulière en conséquence.
l’en-tête http “Location” commence par un L majuscule, essayez de le remplacer dans votre commande.
METTRE À JOUR
OK, j’ai exécuté les deux lignes séparément et chacune fonctionne correctement, sauf qu’il semble que la sortie de la commande curl inclut des caractères de contrôle capturés dans la variable. Lorsque ceci est imprimé plus tard dans la commande echo, la variable $ test est imprimée suivie d’un retour chariot pour placer le curseur au début de la ligne, puis ..2 est imprimé sur le dessus de 1.
Découvrez la variable $ test en moins:
echo 1..$test..2 | less
moins de spectacles:
1..http://www.redirectURL.com/^M..2
où ^ M est le caractère de retour chariot.