Использование tee и paste приводит к взаимоблокировке

Без прав суперпользователя

Это так же просто, как прочитать следующий файл:

$ cat /sys/class/dmi/id/bios_version
1.1.3

С привилегиями суперпользователя

Использовать dmidecode:

$ sudo dmidecode -s bios-version
1.1.3

Кроме того, вам может потребоваться установить этот пакет, который доступен в:

  • Linux i386, x86 -64, ia64
  • FreeBSD i386, amd64
  • NetBSD i386, amd64
  • OpenBSD i386, amd64
  • BeOS i386
  • Солярис x86
  • Хайку i586
2
07.05.2020, 19:35
1 ответ

Я не разобрался в проблеме в деталях. Очевидно, речь идет о разнице в размерах каждой строки, заполняющей некоторый буфер.

Это можно «решить» увеличением буфера:

paste a.fifo <(buffer <b.fifo) | awk '{printf "\r%lu", NR}'

Интересный факт :Добавление bufferк генерирующей команде позволяет завершить awk, но потребляющая команда по-прежнему блокирует (ближе к концу в моем случае):

$ cat sample.txt | tee >(cut -f 1 > a.fifo) >(cut -f 2 | buffer > b.fifo) | awk '{printf "\r%lu", NR}; END { print; print NR; }'
10001


$ paste a.fifo b.fifo | awk '{printf "\r%lu", NR}'
8152

Не имеет смысла ИМХО. Я не удивлюсь, если там будет ошибка.

0
28.04.2021, 23:16

Теги

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