나는 이것에 대해 한동안 머리를 긁적였습니다.
- 이 답변:mpg123에서 "환영" 메시지를 억제하시겠습니까?모든 출력을 억제하려는 경우에만 이 사례에 응답하십시오.
- 이 답변:https://stackoverflow.com/questions/50797724/cannot-capture-diagnostic-output-from-mpg123-while-the-program-is-running출력을 파일로 리디렉션한 다음 해당 파일을 읽는 솔루션이 작동하지 않는다고 생각합니다.
- 처음 몇 줄을 제거하기 위해 sed, awk 또는 tail에 파이프를 연결하는 것과 같은 명백한 작업은 작동하지 않습니다(예:https://stackoverflow.com/questions/24542425/bash-how-to-remove-first-2-lines-from-output)
답변1
-C
파이프 버퍼링이 mpg123 옵션에 문제를 일으키는 것으로 나타났습니다 . 이 문제는 --line-buffered
grep 또는 sed의 옵션을 사용하여 해결할 수 있습니다 -u
.
결국 내가 사용하게 된 플래그 세트는 다음과 같습니다.
mpg123 -Z -C --title */* 2>&1 | grep --line-buffered -Ev "High Performance|written and copyright by|without any warranty but with best wishes|Terminal control enabled|MPEG 1.0|Decoding of" | sed -uE 's/Playing MPEG stream [0-9]+ of [0-9]+: //' | sed -uE "s/Directory: //" | sed -uE "s/\.\.\.//" | sed -uE '/^\s*$/d'
옵션을 단계별로 살펴보겠습니다. 이들 중 일부는 편리한 mpg123 설정에 대한 더 광범위한 질문에 답합니다.
-Z
이건 영원한 무작위 셔플이야-C
제어 명령 허용--title
터미널 제목을 현재 노래 제목으로 변경*/*
현재 하위 디렉터리에서 파일을 찾습니다. 파일이 지정된 디렉터리에 있으면 "*"이면 충분합니다.2>&1
표준 오류(mpg123이 인쇄하는 내용)에서 파이프를 사용하여 수행할 수 있는 표준 출력으로 리디렉션--line-buffered
grep 및-u
sed의 플래그는 버퍼링을 방지하므로 문제가 발생했습니다.- 다른 플래그는 단지 정규식 스위치일 뿐이며 문제의 핵심은 아닙니다.
그런 다음 사용하기 쉽도록 명령에 별칭을 지정했습니다.
alias pmr="clear; mpg123 -Z -C --title */* 2>&1 | grep --line-buffered -Ev 'High Performance|written and copyright by|without any warranty but with best wishes|Terminal control enabled|MPEG 1.0|Decoding of' | sed -uE 's/Playing MPEG stream [0-9]+ of [0-9]+: //' | sed -uE 's/Directory: //' | sed -uE 's/\.\.\.//' | sed -uE '/^\s*$/d'" ## pmr := play music recursively
tail에는 -f
버퍼링을 방지하기 위한 플래그가 있지만 계속해서 문제가 발생합니다.