【问题标题】:Pipe direct tty output to sed管道直接 tty 输出到 sed
【发布时间】:2014-12-15 20:51:02
【问题描述】:

我有一个用于构建程序的脚本,我重定向到 sed 以在构建过程中突出显示错误等。

这很好用,但问题是在这个构建脚本的末尾,它启动了一个通常写入终端的应用程序,但 stdout 和 stderr 重定向似乎没有捕获它。我不确定这个输出是如何打印出来的,而且很难弄清楚。

buildAndStartApp # everything outputs correctly
buildAndStartApp 2>&1 | colorize # Catches build output, but not server output

有什么方法可以捕获所有终端输出? “脚本”命令捕获所有内容,但我希望输出仍然打印到我的终端,而不是重定向到文件。

【问题讨论】:

    标签: bash io-redirection


    【解决方案1】:

    我发现script 有一个 -c 选项,它运行一个命令,所有输出都打印到标准输出和文件。

    我的命令最终是:

    script -c "buildAndStartApp" /dev/null | colorize
    

    【讨论】:

      【解决方案2】:

      首先,当您使用script 时,输出确实 仍然会转到终端(以及重定向到文件)。您可以在第二个窗口中执行类似的操作以实时查看彩色输出:

      tail -f typescript | colorize
      

      其次,如果即使您同时重定向了 stdout 和 stderr,命令的输出也将发送到终端,则该命令可能直接写入/dev/tty,在这种情况下,类似于script 使用伪终端是唯一可以工作的东西。

      【讨论】:

      • 我想避免在第二个窗口中拖尾文件,只是为了保持简单并与我设置的其他构建别名保持一致。除了script,还有其他伪终端选项吗?
      • 嗯,有screen/tmux,它具有用于运行特定命令并记录其输出的命令行选项,但就记录而言,它与script 的情况类似到一个文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 2016-11-10
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多