Оператор перенаправления меняетнаправление вывода (или источник ввода). 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
вычислит стандартный вывод от даты
уже собирается в файл
.
Используя evtest
для проверки входных устройств evdev ядра и xev
, чтобы проверить, какие события получает X, вы можете увидеть, что это действительно Ctrl Alt Последовательность вкладок (первые три события - это нажатия клавиш, последние три события - отпускание клавиш в обратном порядке).
Из журнала xev
также видно, что какое-то приложение, возможно, ваш оконный менеджер, распознает последовательность: оно подавляет событие Tab
и вместо этого начинает действовать самостоятельно (что поэтому xev
получает FocusOut
). Следующие события PropertyNotify
и KeymapNotify
указывают, что это действительно очень вероятно оконный менеджер и, возможно, он пытается изменить раскладку клавиатуры или что-то подобное.
Это означает, что все работает по назначению: MX-мастер мыши отправляет последовательность, последовательность понимается X, и некоторая программа реагирует на последовательность.
Если реакция не та, которую вы хотите, вам необходимо определить программу, которая на нее реагирует (закройте все приложения, попробуйте еще раз с помощью xev
, если то же самое произойдет, это еще один признак того, что это окно manager), найдите файлы конфигурации этой программы, выясните, где последовательность появляется в файлах конфигурации, и измените ее на то, что вам нравится.В любом случае, будет хорошей идеей внимательно прочитать документацию для вашего оконного менеджера, потому что именно там должны быть настроены реакции на последовательности , даже если оказывается какая-то другая программа ( xbindkeys
] и т. д.) проглатывает этот.