Как завихрение печатает к терминалу при передаче по каналу

Когда я curl файл и канал это в файл или другую команду, я вижу вывод в своем терминале. Я не уверен, как это происходит, поскольку канал, как предполагается, берет весь вывод от завихрения, правильно?

Например:

$ curl http://www.archive.org/stream/Pi_to_100000000_places/pi.txt > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  129M    0  129M    0     0  22.5M      0 --:--:--  0:00:05 --:--:-- 24.7M

Править

Я использую завихрение как это:

curl http://www.archive.org/stream/Pi_to_100000000_places/pi.txt | some_other_command > some_file

Я не хочу передавать состояние по каналу к some_other_command, я просто задавался вопросом, как это смогло отобразить состояние. Однако показывая, как перенаправить оба потока, добавленные к ответу, не удаляйте это.

4
задан 1 September 2018 в 13:24

2 ответа

Существует два общедоступные потока вывода: стандартный вывод и стандартная погрешность. На практике, при выполнении в терминале, оба отправляют данные на терминал. > только стандартный вывод перенаправлений и завихрение печатают данные прогресса к стандартной погрешности. Для подавления обоих используйте один из:

curl ... > /dev/null 2>&1
curl ... &> /dev/null    # bash's combined redirection operator
curl -s ...    # -s, --silent: Silent or quiet mode. Don't show progress meter or error messages.

Для отправки обоих в канал:

curl ... 2>&1 | ...
curl |& ...    # bash's combined pipe

, Если Вы не используете |& или &> операторы, все потоки перенаправляются независимо.

Также см.:

7
ответ дан 1 December 2019 в 09:02

Когда Вы будете использовать curl для открытия URL, Вы получите два вывода:

  1. состояние curl само.
  2. содержание того URL.

Завихрение должно использовать способ показать эти два, отдельно иначе обработка реального вывода (содержание URL) была бы трудна, и я закончу с ненужным содержанием (состояние завихрения).

, Таким образом, это использует stderr для его состояния и stdout для содержания.

Используя > Вы перенаправляете содержание URL (stdout) к эти /dev/null, необходимо на самом деле использовать: 2> /dev/null вместо этого.

Также, если Вы хотите победить их обоих к следующей команде:

curl url |&  command

, Если Вы только хотите содержание, которое будет передано по каналу для следующего управления, не видя состояния:

curl 2> /dev/null | command
2
ответ дан 1 December 2019 в 09:02

Другие вопросы по тегам:

Похожие вопросы: