我有以下命令,每次按下键盘键时都会将结果输出为换行符。我不希望它以换行符的形式输出到文件,而是希望它将其发送到没有换行符的文件。
stdbuf -o0 xinput test 11 >out
是否可以?
答案1
尝试添加echo -n
stdbuf -o0 xinput test 11 | xargs echo -n > out
更新
从您的评论中我理解到,您不仅想删除换行符,还想使用 xinput 输出每次按键的日志。
首先检查所有输入设备:
c0rp@c0rp:~$ xinput --list
这是所有可用输入设备的列表
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=13 [slave pointer (2)]
⎜ ↳ RAPOO RAPOO 2.4G Wireless Device id=10 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Video Bus id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Asus WMI hotkeys id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)]
↳ RAPOO RAPOO 2.4G Wireless Device id=14 [slave keyboard (3)]
↳ USB2.0 HD UVC WebCam id=15 [slave keyboard (3)]
现在,如果您想测试设备,请使用test
密钥,并使用第二列中的 id 作为参数。
例如我使用无线键盘,id=14:
xinput --test 14
输出如下:
key press 42
key press 43
key release 43
key release 42
key press 44
最后你想要的是...
抱歉,在这一步我意识到 xinput 无法重定向 stdout 或 stderr,它只是缓冲。证明链接。
因此,实现您想要的操作的唯一方法xinput
是:
将 xinput 写入文件xinput test 11 > out
,然后使用替换所有换行符tr
tr -d '\n' < yourfile.txt
或者如果它不起作用,请使用与 DOS/Windows 行尾相同的方法
tr -d "\n\r" < yourfile.txt
答案2
您应该能够将其通过管道传输tr
或运行tr
最终文件。您可以用空格替换新行
tr '\n' ' '
或者全部删除
tr -d '\n'
例如:
stdbuf -o0 xinput test 11 | tr -d '\n' >out