Согласно вашей ссылке, usb wifi - это Ralink RT3070.
К сожалению, доступен только несвободный драйвер. (Который не предустановлен)
Чтобы установить его, вам нужно добавить репозиторий non-free и установить пакет firmware-ralink
. (more Details)
Вы можете воспроизвести то, что ракушка делает под капотом, выполнив водопровод вручную. Если в вашей системе есть записи / 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"
А как насчет:
cat "$2" | xz -d | diff /dev/sdtin /dev/stderr 2<<EOT
`cat "$1" | xz -d`
EOT