Как я могу передать вывод в файл из терминала без перевода строки?

У меня есть команда ниже, которая выводит результат как новые строки при каждом нажатии клавиши. Я не хочу, чтобы он выводил в файл как новые строки, а хочу, чтобы он отправлял в файл без перевода строки.

 stdbuf -o0 xinput test 11 >out

Возможно ли это?

1
задан 24 December 2013 в 15:55

2 ответа

Попробуйте добавить 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
0
ответ дан 24 December 2013 в 15:55

Вы должны иметь возможность либо передать его через tr, либо запустить tr для окончательного файла. Вы можете либо заменить новые строки пробелами

tr '\n' ' '

, либо удалить их все вместе

tr -d '\n'

Например:

stdbuf -o0 xinput test 11 | tr -d '\n' >out
0
ответ дан 24 December 2013 в 15:55

Другие вопросы по тегам:

Похожие вопросы: