![mpg123에서 환영 메시지를 표시하지 않고 노래는 유지하는 방법은 무엇입니까?](https://linux55.com/image/194757/mpg123%EC%97%90%EC%84%9C%20%ED%99%98%EC%98%81%20%EB%A9%94%EC%8B%9C%EC%A7%80%EB%A5%BC%20%ED%91%9C%EC%8B%9C%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EB%85%B8%EB%9E%98%EB%8A%94%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 이것에 대해 한동안 머리를 긁적였습니다.
- 이 답변: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
버퍼링을 방지하기 위한 플래그가 있지만 계속해서 문제가 발생합니다.