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


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

 stdbuf -o0 xinput test 11 >out

Является ли это возможным?


1
2017-12-24 11:55


происхождения


Скажите, пожалуйста, что именно вы хотите. Потому как stdbuf -o0 xinput test 11, ничего не выводит для меня. Я понимаю, что вы делаете. - c0rp


ответы:


Попробуйте добавить echo -n

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

Обновить

Как я понимаю из вашего комментария, вы хотите не просто удалить linefeed, но и выводить журнал на каждом нажатии клавиши с помощью 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 = 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
2017-12-24 13:05



Я не знаю, почему, он не пишет в файл. Текстовый выходной файл пуст. - kenn
Я обновляю ответ - c0rp
Спасибо за ваш комментарий, я уже знал это, я хочу знать, возможно ли это, пока выкладывается сообщение. Вы говорите, что это невозможно. Думаю, я должен прибегнуть к вашему последнему решению. Благодарю. - kenn
Добро пожаловать! И тебе спасибо. - c0rp


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

tr '\n' ' '

Или удалите их все вместе

tr -d '\n'

Например:

stdbuf -o0 xinput test 11 | tr -d '\n' >out

0
2017-12-24 13:12



Я попробовал вашу команду, она не записывается в файл. Текстовый выходной файл пуст. - kenn
и без tr вы уверены, что получаете результат точно так же, как вы набрали его выше? Поскольку tr должен просто удалить новые строки. - Julian Stirling
Да, это stdbuf -o0 xinput test 11 >out выходы в файл, но не с этим stdbuf -o0 xinput test 11 | tr -d '\n' >out - kenn