Согласно документации libvirt, qemu имеет расширение VNC для включения звука. Некоторые средства просмотра, такие как xvnctitanviewer, поддерживают это расширение, как следует из этого ответа. Если вы перенаправляете звук через виртуальную машину qa qemu, вы можете сделать это через это расширение VNC.
Оператор перенаправления меняетнаправление вывода (или источник ввода). 3>&1
означает «сделать так, чтобы файловый дескриптор 3 указывал туда, куда в данный момент указывает файловый дескриптор 1» (который является терминалом). 3>file
означает «сделать так, чтобы файловый дескриптор 3 указывал на file
». За то короткое время, когда fd 3 указывал на терминал, ничего не произошло, так что вы не получите никакого вывода терминала.
Чтобы получить одни и те же данные в двух местах, что-то должно копировать данные. Это работа tee
.Для каждого прочитанного байта он выводит этот байт дважды (если задан один файловый аргумент плюс его стандартный вывод).
Пусть вас не смущает тот факт, что >&
иногда называют дублированием. Он дублирует файловый дескриптор: 3>&1
дублирует fd 1 в fd 3, что означает, что данные, идущие в fd 1, и данные, идущие в fd 3, объединяются — они оба идут туда, куда указывал fd 1.
Если вы предпочитаете графические пояснения, см. , что подразумевается под соединением STDOUT и STDIN? и Как команда может иметь более одного вывода?
В любом случае ваша команда ничего не выводит на файловый дескриптор 3, поэтому перенаправление fd 3 ничего не меняет. Команда date
записывает в свой стандартный вывод, то есть fd 1, и вы не перенаправляете его.
В Zsh есть функция, называемая multios, которая изменяет значение перенаправления вывода. Если существует несколько перенаправлений вывода для одной и той же команды в одном файловом дескрипторе, то первое изменяетместо, куда указывает этот дескриптор, а последующие реплицируютданные в указанные цели. Например, чтобы получить вывод в файл в дополнение к тому, куда указывал стандартный вывод, вы можете использовать
date >&1 >file
Zsh выполняет работу tee
.Обратите внимание, что порядок перенаправления имеет значение – date >file >&1
будет дважды записывать в file
, поскольку к тому времени, когда оператор >&1
вычислит стандартный вывод от даты
уже собирается в файл
.
Нет, поскольку вывод не дублируется. Чтобы продублировать файловые дескрипторы, вы также должны дважды вывести на них.
Хотя можно и с циклом, вот так:
while read l
do
echo "$l" >&3
echo "$l" >&4
done
С бинарными данными будут глючить (нули выбиты, crlf -s будут преобразованы в lf ).
Ваш пример сделал это:
Перенаправление, по сути, является клоном, в терминологии Unix,это как жесткая ссылка. С суффиксом 3>&1
к команде у вас будут fd 3 и fd 1, указывающие на один и тот же объект (, который теперьfile
).
Если у вас есть некоторое сходство с C, я хотел бы проверить man 3 dup2
, это именно то, что делает перенаправление fd.