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


Eu tenho abaixo o comando que a saída do resultado como novas linhas em cada tecla pressionada. Eu não quero que a saída para arquivo como novas linhas em vez disso eu quero enviá-lo para o arquivo sem linefeeds.

 stdbuf -o0 xinput test 11 >out

É possível?


1
2017-12-24 11:55


origem


Por favor, diga-nos exatamente o que você quer. Porque stdbuf -o0 xinput test 11, não sai nada para mim. Eu sei que você sabe o que está fazendo. - c0rp


Respostas:


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 chave, e como parâmetro use id da 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. Ligação de prova.

Então, a única maneira de fazer o que quiser usando xinput é:

Escrever xinput em um arquivo xinput test 11 > out, em seguida, 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

2
2017-12-24 13:05



Não sei porque, não escreve no arquivo. O arquivo de saída de texto está vazio. - kenn
Eu atualizo resposta - c0rp
Obrigado pelo seu comentário, eu já sabia disso, eu quero saber se é possível ao longo do caminho para o arquivo. Você diz que não é possível. Eu acho que devo recorrer à sua última solução. Obrigado. - kenn
Você é bem vindo! Obrigado também. - c0rp


Você deve ser capaz de canalizá-lo embora tr ou correr 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

0
2017-12-24 13:12



Eu tentei o seu comando, ele não escreve no arquivo. O arquivo de saída de texto está vazio. - kenn
e sem o tr você tem certeza de obter uma saída exatamente como você digitou acima? Como o tr deve apenas remover novas linhas. - Julian Stirling
sim este stdbuf -o0 xinput test 11 >out saídas para arquivo, mas não com este stdbuf -o0 xinput test 11 | tr -d '\n' >out - kenn