Я пытаюсь получить ссылку перенаправления от сайта при помощи curl -I
затем grep
к "местоположению" и затем sed
текст местоположения так, чтобы меня оставили с URL.
Но это не работает. Это выводит URL на экран и не помещает его
test=$(curl -I "http://www.redirectURL.com/" 2> /dev/null | grep "location" | sed -E 's/location:[ ]+//g')
echo "1..$test..2"
Который затем выводы:
..2http://www.newURLfromRedirect.com/bla
Что продолжается?
Как указывает @ user353852, у вас есть символ возврата каретки в выводе из curl
, который становится очевидным только при попытке echo
любого символа после него. Пейджер less
показывает это как ^ M
Вы можете использовать sed
для удаления «управляющих символов», как в этом примере:
% 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
Примечания :
Я использовал awk
вместо вашего grep [...] | sed
подход, экономя один процесс.
Для меня curl
возвращает местоположение в строке, начинающейся с «Location:» (с заглавной буквы «L»), если ваша версия действительно сообщает об этом со строчной «l», тогда вы может потребоваться соответствующее изменение регулярного выражения.
заголовок http "Location" начинается с заглавной буквы L, попробуйте заменить ее в своей команде.
UPDATE
OK, я пробежал обе строки отдельно, и каждая из них работает нормально, за исключением того, что это выглядит так, как будто выходные данные команды curl включают некоторые управляюные символы, которые записываются в переменную. Когда это позже печатается в команде echo, $test переменная печатается, за которой следует возврат каретки, чтобы установить курсор в начало строки, а затем .. 2 печатается поверх 1..
Проверьте переменную $test в less:
echo 1..$test..2 | less
less shows:
1..http://www.redirectURL.com/^M..2
,где ^M — возвращаемый символ каретки.