Como posso enviar saída para o arquivo do terminal sem alimentação de linha?

1

Eu tenho abaixo o comando que gera o resultado como novas linhas em cada tecla pressionada. Eu não quero que ele seja enviado para o arquivo como novas linhas, em vez disso eu quero que ele envie para o arquivo sem alimentação de linha.

 stdbuf -o0 xinput test 11 >out

É possível?

    
por kenn 24.12.2013 / 12:55

2 respostas

2

Tente adicionar echo -n

stdbuf -o0 xinput test 11 | xargs echo -n > out

Atualizar

Como eu entendo do seu comentário, você não quer apenas remover o avanço de linha, mas também o log de saída em cada tecla usando xinput.

Primeiro, verifique todos os dispositivos de entrada:

   c0rp@c0rp:~$ xinput --list

Esta é uma lista de todos os dispositivos de entrada disponíveis

⎡ 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)]

Agora, se você quiser testar o dispositivo, use test key e, como parâmetro, use id na segunda coluna.

Por exemplo, eu uso o teclado sem fio, id = 14:

xinput --test 14

Aqui está a saída:

key press   42 
key press   43 
key release 43 
key release 42 
key press   44 

E finalmente o que você quer é ...

Desculpe, nesta etapa eu percebo que xinput não pode redirecionar stdout ou stderr, apenas buffered. Prova de link .

Portanto, a única maneira de fazer o que você deseja usando xinput é:

Escreva xinput em um arquivo xinput test 11 > out e substitua todas as novas linhas usando tr

tr -d '\n' < yourfile.txt

ou se não funcionar, use o mesmo para finais de linha DOS / Windows

tr -d "\n\r" < yourfile.txt
    
por c0rp 24.12.2013 / 14:05
0

Você deve ser capaz de direcioná-lo com tr ou executar tr no arquivo final. Você pode substituir as novas linhas por espaços

tr '\n' ' '

Ou exclua todos juntos

tr -d '\n'

Por exemplo:

stdbuf -o0 xinput test 11 | tr -d '\n' >out
    
por Julian Stirling 24.12.2013 / 14:12