Скрипт Bash, написанный в vim, работает иначе, чем в терминале! почему?

#bash #curl #scripting #quotes #double-quotes

Вопрос:

Идея заключается в скрипте bash, который перечисляет внутренние порты (SSRF) веб-сайта, используя порты в «common_ports.txt» файл и выводит порт и «длину содержимого» каждого порта соответственно.

Это запрос на завиток:

 $ curl -Is "http://10.10.182.210:8000/attack?port=5000"
 HTTP/1.0 200 OK 
 Content-Type: text/html; charset=utf-8
 Content-Length: 1035
 Server: Werkzeug/0.14.1 Python/3.6.9
 Date: Sat, 16 Oct 2021 13:02:27 GMT
 

Чтобы получить длину содержимого, я использовал grep:

 $ curl -Is "http://10.10.182.210:8000/attack?port=5000" | grep  "Content-Length"
  Content-Length: 1035
 

До сих пор все было в порядке. Но когда я написал это в vim, чтобы автоматизировать процесс, я получил странный вывод.

Это мой полный сценарий bash:

 #!/bin/bash
file="./common_ports.txt"


while IFS= read -r  line 
do
        response=$(curl -Is "http://10.10.182.210:8000/attack?port=$line")
         
        len=$(echo $response | grep  "Content-Length:")
        echo "$len"
done < "$file"

 

И ЭТО РЕЗУЛЬТАТ:

 $ ./script.sh
 Date: Sat, 16 Oct 2021 13:10:35 GMT9-8
 Date: Sat, 16 Oct 2021 13:10:36 GMT9-8
^C
 

Он выводит последнюю строку response переменной. Кто-нибудь может объяснить, почему??
Заранее спасибо!!!

Комментарии:

1. Это не имеет никакого отношения к Vim.

Ответ №1:

Вам нужно завернуть $response внутренние двойные кавычки.

 len=$(echo "$response" | grep  "Content-Length:")