Команда curl искажена в сценарии оболочки - PullRequest
0 голосов
/ 28 июня 2018

Почему, когда я использую curl в ssh-сессии, он работает хорошо, но когда я использую его в сценарии оболочки, он возвращает ошибку.

В сеансе SSH:

[root@XXXX scripts]# export host_name="http://XXXX:number_port"
[root@XXXX scripts]# echo "curl -u GET ${host_name}/application/listteam"
curl -u GET http://XXXX:number_port/application/listteam

Но когда я использую его в сценарии оболочки:

list_team=$(curl GET "${host_name}/application/listteam")
echo "$list_team"

Повтор:

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: GET; Name or service not known
curl: (3) <url> malformed

Я вижу, что не удалось разрешить хост, но почему при попытке в сеансе ssh это работает?

Какую идею, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018
curl -u GET ${host_name}/application/listteam"             # interactive
list_team=$(curl GET "${host_name}/application/listteam")  # non-interactive

В первом примере у вас есть "-u GET". Параметр "-u" требует аргумента, а curl интерпретирует слово "GET" как этот аргумент. Затем он интерпретирует следующий аргумент командной строки как URL для извлечения.

Во втором примере у вас просто есть "GET" без "-u". curl интерпретирует слово «GET» как один из URL-адресов, которые он должен получить. Вы получаете сообщение об ошибке, поскольку оно не может интерпретировать слово «GET» как действительный URL.

"- u" используется для указания имени пользователя и пароля для запроса. Если вам действительно нужно указать слово «GET» в качестве имени пользователя, тогда ваш второй пример должен иметь «-u GET», как и в первом примере.

С другой стороны, если предполагается, что слово «GET» является типом HTTP-запроса, то вам следует использовать «-X GET». Или просто оставьте это, потому что curl по умолчанию выполнит запрос GET.

0 голосов
/ 28 июня 2018

Возможно, потому что вы используете имя_хоста как переменную в сценарии оболочки вместо имени_хоста.

Также убедитесь, что вы можете получить доступ к этой переменной с помощью сценария оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...