AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 510888
Accepted
SebMa
SebMa
Asked: 2019-04-06 16:26:25 +0800 CST2019-04-06 16:26:25 +0800 CST 2019-04-06 16:26:25 +0800 CST

如何防止/保持 tail 将 \r 替换为 \n

  • 772

当我在背景中播放带有 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 like /dev/pts/2,因此如果我键入stty inlcr它应该会影响当前的 tty。

我仍然得到相同的混乱输出tail -f nohup.out

EDIT2:根据@mosvytail的说法,这不是罪魁祸首,而是mpv。

我想出了一种方法来对mpv's进行 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" &

我怎样才能做到这一点 ?解决了 !

linux tail
  • 1 1 个回答
  • 331 Views

1 个回答

  • Voted
  1. Best Answer
    mosvy
    2019-04-07T08:15:38+08:002019-04-07T08:15:38+08:00

    tail不替换为。_\r\n

    是您的mpv程序根据其 stderr 是否为终端来调整其状态输出。

    关于tail不替换\rwith的简单测试\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
    

    就像它的 parent 一样mplayer,mpv当有人试图以与作者想象的不同的方式运行它时,它是相当讨厌的;当 stderr 是常规文件或管道时,我无法找到任何选项让它以与终端相同的方式打印其状态。您可以做的最简单的事情是在单独的screen/tmux窗口中运行它,而不是使用nohup.

    • 2

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve