如何才能不带换行符地将输出从终端传输到文件?

如何才能不带换行符地将输出从终端传输到文件?

我有以下命令,每次按下键盘键时都会将结果输出为换行符。我不希望它以换行符的形式输出到文件,而是希望它将其发送到没有换行符的文件。

 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

相关内容