Câu hỏi Làm thế nào tôi có thể thoát ra đầu ra để tập tin từ thiết bị đầu cuối mà không có linefeeds?


Tôi có lệnh dưới đây để xuất kết quả dưới dạng các dòng mới trong mỗi lần nhấn phím. Tôi không muốn nó xuất ra tập tin như là dòng mới thay vào đó tôi muốn nó gửi nó vào tập tin mà không cần linefeeds.

 stdbuf -o0 xinput test 11 >out

Có thể không?


1
2017-12-24 11:55


gốc


Xin vui lòng cho chúng tôi biết chính xác những gì bạn muốn. Bởi vì stdbuf -o0 xinput test 11, đầu ra không có gì cho tôi. Tôi mặc dù bạn biết những gì bạn đang làm. - c0rp


Các câu trả lời:


Thử thêm echo -n

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

Cập nhật

Theo tôi hiểu từ bình luận của bạn, bạn không chỉ muốn loại bỏ linefeed, mà còn đăng nhập đầu ra trên mỗi phím bấm bằng cách sử dụng xinput.

Trước tiên hãy kiểm tra tất cả các thiết bị đầu vào:

   c0rp@c0rp:~$ xinput --list

Đây là danh sách tất cả các thiết bị đầu vào có sẵn

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

Bây giờ nếu bạn muốn thử nghiệm thiết bị, hãy sử dụng test và sử dụng id tham số từ cột thứ hai.

Ví dụ, tôi sử dụng bàn phím không dây, id = 14:

xinput --test 14

Đây là đầu ra:

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

Và cuối cùng những gì bạn muốn là ...

Xin lỗi, bước này tôi nhận ra rằng xinput không thể chuyển hướng stdout hoặc stderr, nó chỉ buffered. Liên kết bằng chứng.

Vì vậy, cách duy nhất để làm những gì bạn muốn bằng cách sử dụng xinput Là:

Viết lời xin vào một tập tin xinput test 11 > out, sau đó thay thế tất cả các dòng mới bằng cách sử dụng tr

tr -d '\n' < yourfile.txt

hoặc nếu nó không hoạt động giống nhau cho các kết thúc dòng DOS / Windows

tr -d "\n\r" < yourfile.txt

2
2017-12-24 13:05



Tôi không biết tại sao, nó không ghi vào hồ sơ. Tệp đầu ra văn bản trống. - kenn
Tôi cập nhật câu trả lời - c0rp
Cảm ơn bạn đã bình luận của bạn, tôi đã biết rằng, tôi muốn biết nếu nó có thể trong khi đường ống ra tập tin. Bạn nói điều đó là không thể. Tôi nghĩ rằng tôi phải nghỉ mát để giải pháp cuối cùng của bạn. Cảm ơn. - kenn
Không có chi! Cảm ơn. - c0rp


Bạn sẽ có thể hoặc là ống nó mặc dù tr hoặc chạy tr trên tập tin cuối cùng. Bạn có thể thay thế các dòng mới bằng dấu cách

tr '\n' ' '

Hoặc xóa tất cả chúng lại với nhau

tr -d '\n'

Ví dụ:

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

0
2017-12-24 13:12



Tôi đã thử lệnh của bạn, nó không ghi vào tập tin. Tệp đầu ra văn bản trống. - kenn
và không có tr bạn chắc chắn bạn nhận được một đầu ra chính xác như bạn đã gõ nó ở trên? Như tr nên chỉ cần loại bỏ các dòng mới. - Julian Stirling
Vâng cái này stdbuf -o0 xinput test 11 >out đầu ra cho tệp nhưng không phải với stdbuf -o0 xinput test 11 | tr -d '\n' >out - kenn