Итак, я нашел решение, хотя это скорее обходной путь, чем правильное решение. Так что я все еще не могу, насколько мне известно, напрямую пройти через мою клавиатуру.
Чтобы решить эту проблему, я сначала удалил беспроводную клавиатуру/мышь и вместо этого добавил свою хорошую мышь в качестве транзитной. Таким образом, мой беспроводной комбо предназначен для моего хоста Linux, и хорошая клавиатура также есть на хосте Linux, только хорошая мышь предназначена только для Windows.
Затем я настроил сервер display spice, чтобы Windows работала как окно в Linux, однако здесь нет дисплея, только черный экран (, что нормально ). Теперь я нажимаю на это окно с помощью своего беспроводного комбо и управляю окнами с помощью моей хорошей мыши, и нажатия клавиш моей хорошей клавиатуры также проходят!
Я немного волновался, что это вызовет небольшую задержку, однако после тестового раунда в Dirty Bomb я не почувствовал заметной задержки ни с мышью, ни с клавиатурой. Так что, кажется, работает отлично. Я бы все же предпочел напрямую проходить через аппаратное обеспечение, но я не могу жаловаться.
Существует риск повреждения файла в случае прерывания команды:
{ awk '!seen[$0]++';
python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())'; } <sample.txt 1<>sample.txt
Мы создаем группу команд внутри фигурных скобок, перенаправляя стандартный ввод для группы на sample.text
, а также открывая sample.txt
в режиме чтения+записи без усечения через 1<>sample.txt
.
awk '!seen[$0]++'
— это идиома awk для удаления дубликатов при сохранении порядка
Когда команда awk
завершается, дескриптор файла, соответствующий стандартному выводу, размещается в каком-то промежуточном месте в пределах sample.txt
, и sample.txt
необходимо урезать до этого места. Я могу придумать два способа добиться этого
python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())'
является опцией, если установлено python
В системе GNU Linuxtruncate -s "$(awk '/^pos:/{print $2}' /proc/$$/fdinfo/1)" sample.txt
Можно использовать sort
с-o
sort -u sample.txt -o sample.txt
-u
для уникальных
-o
для выходного имени файла
Специально используя GNU awk
и его недавно приобретенную способность выполнять -редактирование места,
$ cat file
1
2
1
3
4
1
$ awk -i inplace '!seen[$0]++' file
$ cat file
1
2
3
4
Обратите внимание, что, как и в случае с большинством инструментов, которые выполняют «в -редактирование места» (, например. sed -i
), для выполнения редактирования используется временный файл. Однако вам не нужно вручную перемещать файлы.
См. также: