Число количества байтов, переданных по каналу от одного процесса до другого

SQL-сервер mangement студия имеет способность генерировать схемы базы данных. Нажмите на базу данных в обозревателе объектов и затем нажмите на папку схемы базы данных.

17
задан 18 December 2009 в 11:17
4 ответа

Канал через вход dd. dd по умолчанию является stdin, и вывод по умолчанию является stdout; когда это закончит stdin/stdout ввод-вывод, это сообщит stderr на том, сколько данных это передало.

Если Вы хотите получить вывод dd, и другие программы уже говорят с stderr, то используют другой дескриптор файла. Например,

$ exec 4>~/fred
$ input-command | dd 2>&4 | output-command
$ exec 4>&-
16
ответ дан 2 December 2019 в 20:27
  • 1
    Couldn' t Вы пропускают exec и просто производят в файл непосредственно? input-command | dd 2>~/fred | output-command –  Paused until further notice. 18 December 2009 в 17:34
  • 2
    Мм, да. У меня, по-видимому, был один из " those" моменты, извините. –  Phil P 21 December 2009 в 04:28

Используйте объем плазмы средство просмотра канала. Это - большой инструмент. После того как Вы знаете об этом, Вы никогда не будете знать, как Вы жили без него.

Это может также показать Вам индикатор выполнения и 'скорость' передачи.

28
ответ дан 2 December 2019 в 20:27
  • 1
    В моем поиске я приехал через это, но мне нужен он для установки переменной с числом байтов, переданных так, чтобы я мог использовать его в другом процессе. –  Simon Hodgson 18 December 2009 в 11:30

process_a | tee >(process_b) | wc --bytes мог бы работать. Можно затем перенаправить wcрассчитайте туда, где когда-либо Вам нужен он. Если process_b производит что-либо к stdout/stderr необходимо будет, вероятно, перенаправить это прочь где-нибудь, если только /dev/null.

Для немного изобретенного примера:

filestore:~# cat document.odt | tee >(dd of=/dev/null 2>/dev/null) | wc --bytes
4295

Посредством объяснения: tee позволяет Вам прямой вывод в несколько файлов (плюс stdout) и >() конструкция является "заменой процесса удара", которая заставляет процесс быть похожим на файл только для записи в этом случае, таким образом, можно перенаправить к процессам, а также файлам (см. здесь, или этот question+answer для примера использования tee отправить вывод во многие процессы).

6
ответ дан 2 December 2019 в 20:27
  • 1
    Мне нравится это решение, печально оболочка I' m использование (BusyBox) doesn' t, кажется, поддерживают > (), нотация, но это действительно дает возможность выполнения что I' m после. –  Simon Hodgson 21 December 2009 в 11:04
  • 2
    Да, Вам нужен довольно полный удар, чтобы иметь ту функцию - это - вид вещи это isn' t наиболее часто используемый так разделяется из оболочек сокращения (даже те, которые имеют цель того, чтобы быть, более или менее колотят совместимый) как busybox для оставления свободного места. –  David Spillett 21 December 2009 в 14:43

Sé que arribo tard a la festa, però crec que tinc una bona resposta que pot millorar aquest fil útil.
Aquesta és una barreja de respostes de @Phil P i @David Spillett, però:

  • de manera diferent de @Phil P, evita crear un nou fitxer
  • de manera diferent de @David Spillett, manté l'estructura de la canonada

    • . 12101] El recompte de bytes s’imprimeix a stdout, juntament amb qualsevol sortida de process_b.
      Podeu utilitzar un prefix per identificar la línia que conté bytes quan es treballa amb la sortida ( Bytes: a l'exemple).

      exec 3>&1
      process_a | tee >({ echo -n 'Bytes:'; wc -c; } >&3) | process_b
      exec 3>&-
      

      AVÍS:
      No confieu en l'ordre de les línies de la sortida
      L'ordre és imprevisible i sempre pot variar, fins i tot quan es crida al mateix script amb els mateixos paràmetres.

1
ответ дан 2 December 2019 в 20:27

Теги

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