꼬리를 방지/유지하는 방법 \r을 \n으로 바꾸십시오.

꼬리를 방지/유지하는 방법 \r을 \n으로 바꾸십시오.

백그라운드에서 mpv로 비디오를 재생하면 다음과 같은 결과가 나타납니다.

$ tail -f nohup.out 
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 1266x720 30.000fps)
 (+) Audio --aid=1 (*) 'DASH audio' (aac 1ch 48000Hz) (external)
File tags:
 Artist: TBN
 Date: 20180113
 Title: Joseph Prince joins Matt & Laurie TONIGHT on PRAISE... watch NOW!
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 1266x720 yuv420p
AV: 00:00:00 / 00:56:50 (0%) A-V:  0.000
AV: 00:00:00 / 00:56:50 (0%) A-V:  0.000
AV: 00:00:00 / 00:56:50 (0%) A-V:  0.000
... # THERE ARE QUITE A LOT OF LINES
AV: 00:00:03 / 00:56:50 (0%) A-V:  0.000
AV: 00:00:03 / 00:56:50 (0%) A-V:  0.000
Saving state.


Exiting... (Quit)
^C

하지만 나는 다음과 같은 출력을 원합니다(예: 출력이 없는 파일을 재생할 때 nohup).

$ mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 1266x720 30.000fps)
 (+) Audio --aid=1 (*) 'DASH audio' (aac 1ch 48000Hz) (external)
File tags:
 Artist: TBN
 Date: 20180113
 Title: Joseph Prince joins Matt & Laurie TONIGHT on PRAISE... watch NOW!
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 1266x720 yuv420p
AV: 00:00:03 / 00:56:50 (0%) A-V:  0.000
Saving state.


Exiting... (Quit)

EDIT1: 저는 tty 같은 것을 사용하고 있으므로 이를 /dev/pts/2입력하면 stty inlcr현재 tty에 영향을 미칩니다.

나는 여전히 똑같은 엉망인 출력을 얻습니다.tail -f nohup.out

편집 2: @mosvy에 따르면 tail비난할 사람이 아니라 mpv비난받아야 할 사람입니다.

mpvs에 대해 S&R을 수행하는 방법을 찾았습니다 stderr.

$ mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/ 2>&1 | perl -p -e '$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/' | tee mpv_all.log
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 634x360 30.000fps)
 (+) Audio --aid=1 (*) (aac 1ch 48000Hz)
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 634x360 yuv420p
AV: 00:00:08 / 00:56:50 (0%) A-V:  0.000 Cache: 1024s+86MB
Saving state.
[ffmpeg] https: Will reconnect at 63421312 in 0 second(s), error=End of file.


Exiting... (Quit)

편집 3: @mosvy 감사합니다. 이제 작동합니다.

$ nohup sh -c ' mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/ 2>&1 | perl -p -e '\''$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/'\'' ' &
$ tail -f nohup.out
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 634x360 30.000fps)
 (+) Audio --aid=1 (*) (aac 1ch 48000Hz)
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 634x360 yuv420p
AV: 00:00:08 / 00:56:50 (0%) A-V:  0.000 Cache: 1767s+147MB
Saving state.
[ffmpeg] https: Will reconnect at 103693952 in 0 second(s), error=End of file.


Exiting... (Quit)
^C

편집 4: @jw013 덕분에 또 다른 솔루션:

export perl_script='$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/'
mpv="command mpv"
args=("$@")
nohup sh -c "$mpv ${args[*]} 2>&1 | perl -p -e '$perl_script' | tee ~/mpv_all.log" &

어떻게 해야 하나요? 해결되었습니다!

답변1

tail아니요\r로 교체하세요 \n.

프로그램 은 mpvstderr이 터미널인지 여부에 따라 상태 출력을 조정합니다.

tail다음으로 대체하지 않고 \r간단한 테스트에 관하여 \n:

$ nohup sh -c 'while printf "s=$((s=s+1))\r"; do sleep 1; done' &
[1] 3897
$ nohup: ignoring input and appending output to 'nohup.out'

$ tail -f nohup.out
s=8  # s=9, s=10 ... on the same line

부모와 마찬가지로 mplayer누군가 mpv가 작성자가 상상한 것과 다른 방식으로 실행하려고 하면 매우 까다로워집니다. stderr이 일반 파일이거나 파이프일 때 터미널에서와 동일한 방식으로 실행되도록 하는 옵션을 찾을 수 없습니다. 그 상태. 당신 screen이 할 수 tmux있는 가장 쉬운 일은 nohup.

관련 정보