Почему только Perl backticks выполняет команду curl, показывающую индикатор выполнения? - PullRequest
1 голос
/ 28 апреля 2020

Мы используем команду perl с backticks для выполнения curl, она показывает индикатор выполнения, как показано ниже:

root@wetraveller:~# perl -e "print `curl http://127.0.0.1:53424/`"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) Failed to connect to 127.0.0.1 port 53424: Connection refused

Когда я напрямую выполняю curl , он не показывает индикатор выполнения:

root@wetraveller:~# curl http://127.0.0.1:53424/
curl: (7) Failed to connect to 127.0.0.1 port 53424: Connection refused

Когда я использую команду system для выполнения curl, он не показывает индикатор выполнения

root@wetraveller:~# perl -e "system('curl http://127.0.0.1:53424/')"
curl: (7) Failed to connect to 127.0.0.1 port 53424: Connection refused

выполняется точно такая же команда, но если она заключена в обратные тики и выполнена с помощью Perl, результат будет другим.

Так это проблема с Perl или с Curl?

I понять с опцией -s мы можем подавить вывод, мне просто любопытно, почему вывод может быть другим?

1 Ответ

1 голос
/ 28 апреля 2020

Чтобы захватить то, что дочерний элемент печатает на своем STDOUT, обратные метки связывают канал с STDOUT дочернего элемента.

По умолчанию curl отображает этот индикатор на STDERR, когда STDOUT не является терминалом.

$ curl https://pastebin.com/raw/6KdStLY6; echo
A small document

$ curl https://pastebin.com/raw/6KdStLY6 | cat; echo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    16    0    16    0     0     64      0 --:--:-- --:--:-- --:--:--    64
A small document

Причиной этого является ощущение прогресса при загрузке файла на диск.

$ curl https://pastebin.com/raw/6KdStLY6 >file; echo done
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    16    0    16    0     0    111      0 --:--:-- --:--:-- --:--:--   111
done

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

$ curl -s https://pastebin.com/raw/6KdStLY6 >file; echo done
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...