LƯU Ý: một dòng mới xuất hiện nhưng od -c không hiển thị nó.
Lệnh trạng thái của trình phát nhạc của tôi ( quodlibet --status | od -c
) có ba trạng thái và tôi đang cố gắng viết một điều kiện dựa trên đầu ra đó. Các đầu ra từ lệnh đó là như thế này (có thể khác nhau tùy thuộc vào cấu hình).
Tôi nghĩ rằng đây là in ra stderr vì
od -c
không hiển thị đúng, mặc dù nó thực hiện cho các lệnh khác.not-running 0000000
tạm dừng
0000000 p a u s e d P a n e d B r o w 0000020 s e r 1 . 0 0 0 s h u f f l 0000040 e o n 0 . 2 2 8 \n 0000053
đang chơi
0000000 p l a y i n g P a n e d B r o 0000020 w s e r 1 . 0 0 0 s h u f f 0000040 l e o n 0 . 2 3 2 \n 0000054
Mục tiêu của tôi là loại bỏ mọi thứ trừ "không chạy", "tạm dừng" hoặc "chơi" và sử dụng nó trong một điều kiện, như thế này:
#!/bin/bash
status=$(quodlibet --status | awk '{split($0,m," "); printf "%s",m[1]}' | tr -d '\000\007\010\n')
if [ "$status" = "playing" ]; then
quodlibet --print-playing '<artist>: <title>' | cut -c1-45
else
echo -n "$status"
fi
Trong trường hợp người chơi không chạy mặc dù điều này luôn in một dòng mới trong thiết bị đầu cuối sau khi "không chạy". Ngay cả khi tôi làm một cái gì đó như thế này
echo -n "$(quodlibet --print-playing '<artist>: <title>' | cut -c1-45)"
Nếu tôi dẫn đầu ra đó od -c
, tôi sẽ nhận được cùng
not-running
0000000
Điều đó không đúng. Dòng mới không hiển thị, nhưng nó ở trong thiết bị đầu cuối.
Câu hỏi
- Điều gì gây ra điều này?
- Là lệnh in thành lỗi tiêu chuẩn khi chương trình không chạy?
- Làm thế nào tôi có thể xác định điều này?