Как эмулировать подстановку процессов в Dash?

Согласно вашей ссылке, usb wifi - это Ralink RT3070.

К сожалению, доступен только несвободный драйвер. (Который не предустановлен)

Чтобы установить его, вам нужно добавить репозиторий non-free и установить пакет firmware-ralink. (more Details)

18
15.04.2019, 12:41
2 ответа

Вы можете воспроизвести то, что ракушка делает под капотом, выполнив водопровод вручную. Если в вашей системе есть записи / dev / fd / NNN , вы можете использовать перетасовку файловых дескрипторов: вы можете преобразовать

main_command <(produce_arg1) <(produce_arg2) >(consume_arg3) >(consume_arg4)

в

{ produce_arg1 |
  { produce_arg2 |
    { main_command /dev/fd5 /dev/fd6 /dev/fd3 /dev/fd4 </dev/fd/8 >/dev/fd/9; } 5<&0 3>&1 |
    consume_arg3; } 6<&0 4>&1; |
  consume_arg4; } 8<&0 9>&1

. Я показал более сложный пример, чтобы проиллюстрировать несколько входов. и выходы. Если вам не нужно читать из стандартного ввода, и единственная причина, по которой вы используете подстановку процесса, заключается в том, что команде требуется явное имя файла, вы можете просто использовать / dev / stdin :

main_command <(produce_arg1)
produce_arg1 | main_command /dev/stdin

Без / dev / fd / NNN необходимо использовать именованный канал .Именованный канал - это запись в каталоге, поэтому вам нужно где-то создать временный файл, но этот файл является просто именем, он не содержит никаких данных.

tmp=$(mktemp -d)
mkfifo "$tmp/f1" "$tmp/f2" "$tmp/f3" "$tmp/f4"
produce_arg1 >"$tmp/f1" &
produce_arg2 >"$tmp/f2" &
consume_arg3 <"$tmp/f3" &
consume_arg4 <"$tmp/f4" &
main_command "$tmp/f1" "$tmp/f2" "$tmp/f3" "$tmp/f4"
rm -r "$tmp"
14
27.01.2020, 19:46

А как насчет:

cat "$2" | xz -d | diff /dev/sdtin /dev/stderr 2<<EOT
`cat "$1" | xz -d`
EOT
0
27.01.2020, 19:46

Теги

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