bash 包装器将 stderr 设为红色

2023-12-08

Bash 支持颜色,即\033[31m切换到红色并且\033[0m切换回无色。

我想制作一个小型的 bash 包装器,它可以可靠地将 stderr 输出为红色,即它应该将\033[31m之前和\033[0m在来自 stderr 的所有内容之后。

我不确定这是否可能,因为当两个并行进程(甚至单个进程)同时写入 stdout 和 stderr 时,必须有一种方法可以通过逐个字符来区分两者。


对文本进行着色非常简单:读取每一行并在开头和结尾处使用适当的转义序列进行回显。但上色标准误变得很棘手,因为标准错误不会传递到管道。

这是一种通过交换标准错误和标准输出,然后过滤标准输出的方法。

这是我们的测试命令:

#!/bin/bash

echo hi
echo 'Error!' 1>&2

And the wrapper script:

#!/bin/bash
(# swap stderr and stdout
 exec 3>&1 # copy stdout to fd 3
 exec 1>&2 # copy stderr to fd 1
 exec 2>&3- # move saved stdout on fd 3 over to 2
 "${@}") | while read line; do
                echo -e "\033[31m${line}\033[0m"
           done

Then:

$ ./wrapper ./test-command
hi
Error! # <- shows up red

不幸的是,包装器命令的所有输出都来自stderr, not stdout,因此您无法将输出通过管道传输到任何其他脚本中。你也许可以通过以下方式解决这个问题创建临时 fifo…但希望这个小包装脚本足以满足您的需求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash 包装器将 stderr 设为红色 的相关文章

随机推荐

  • 向订阅该主题的所有用户推送通知(使用 FCM Firebase 的登录用户除外)

    现在我有一个拥有一万多名成员的群组 并且我为一个群组创建了一个主题 通知主题 该群组中的所有用户都订阅了该主题 现在 在组内任何用户都可以添加图像 文件或视频等帖子 当用户添加帖子时 我需要向订阅该主题的所有用户发送通知 但除了一个之外 即
  • 如何检测 CMake 中的意外函数覆盖?

    我刚刚在我的 CMake 代码中发现了复制和粘贴错误 function name do something endfunction function name do something else endfunction 我已经多次复制 重命
  • SKLabelNode 将消失但仍然可点击

    我正在使用 SpriteKit 和 Swift 制作一个游戏 运行 Xcode 6 我有一个SKLabelNode 我们称之为myLabelNode对于这个例子 当我打电话时myLabelNode removeFromParent 它会像它
  • C# StreamReader 从标签输入文件?

    我一直在使用StreamReader inputFile代码来自ListBox它效果很好 但是 我想输入来自 txt文件到一个Label盒子代替 这可能吗 这是我尝试过的代码 它给了我一个错误描述 说明 Use of unassigned
  • 如何为 UIPageViewControllerDataSource 提供默认实现?

    我认为这个问题的答案通常会解决 Objective C 协议的问题 但这是我遇到的第一个问题 我希望在实施时使用这些方法UIPageViewControllerDataSourceWithConnections import UIKit p
  • 是否有*任何*情况下“for _ in [1,2,3]”根本不会循环?

    我正在编写一些代码并犯了一个错误 该错误简化为 func f gt Int for in 1 2 3 return 1 编译器向我显示一个错误 指出f缺少回报 这让我意识到我的错误 我忘记在周围放置一个 if 语句return 但后来我意识
  • python 多处理队列实现

    我无法理解如何将队列实现到下面的多处理示例中 基本上 我希望代码能够 1 产生2个进程 完成 2 将我的 id list 分成两部分 完成 3 让每个进程迭代列表 打印出每个项目 并且仅在完成列表后才关闭 我知道我必须实现某种类型的排队系统
  • 如何使用ajax从html获取数据并将数据传递到php

    您好 我很想知道如何将字符串从表单传递到 php 该 php 将测试其中是否有内容 然后使用此表单发布一条警报消息 尝试从中获取数据 然后显示它是否已通过正确 HTML 代码
  • 在 Android 中使用 NanoHTTPD

    我正在尝试使用 NanoHTTP 来提供 HTML 文件 然而 NanoHTTP 相对来说没有文档记录 而且我对 Android 还很陌生 我的问题是 我在哪里存储 html 文件 以及如何使用 NanoHTTP 提供它 答案很晚 但可能对
  • 如何从 Java 9+ 中的目录动态加载模块

    我一直在开发一个带有基于插件的系统的软件 用户可以在其中编写自己的插件 我对 JMPS 很陌生 但我想使用 JMPS 而不是 OSGi 来实现这一点 制作了一个单独的 API 模块 甚至创建了一个测试插件 插件以文件名 someplugin
  • UTC_TIMESTAMP() 是否受夏令时影响?

    我正在编写一个具有时段预订系统的应用程序 用户可以位于不同的时区 因此我需要以 UTC 时间将值存储在数据库中 我想知道如何UTC TIMESTAMP 是在MySQL中计算的 可靠吗 如果服务器时区位于夏令时地区UTC TIMESTAMP
  • Laravel 多文件上传验证

    我目前正在以一种形式工作 我在多个文件上传验证方面遇到一些问题 我的表单中只有一个字段允许上传多个文件
  • 如何在 pyplot 中的分组条形图中标记组?

    我想在 pyplot 中做类似以下的事情 我也可以在其中标记条形图和组 我能够标记条形 但不知道如何标记组 谢谢 默认的Seaborn 条形图会创造一个传说来显示岁月 import numpy as np import pandas as
  • C# - httpWebRequest 流的大小是否有限制?

    我正在尝试构建一个应用程序 使用 httpwebrequests 从自定义网络服务器下载一个小二进制文件 20 25 KB 这是服务器端代码 Stream UpdateRequest context Request InputStream
  • 从 HEVC 参考软件获取一些信息

    我是 HEVC 新手 现在正在了解参考软件 现在正在研究帧内预测 编码后我需要获取如下信息 给定 CTU 的 CU 结构 对于计算期间的每个 CU 它是信息 例如 QP 值 选择的亮度模式 选择的色度模式 CU 是否处于 CTU 分割决策的
  • 如何从我不拥有的画布中获取像素数据?

    我正在尝试从画布获取像素 RGBA 数据以进行进一步处理 我认为画布实际上是一个 Unity 游戏 如果这有什么不同的话 我正在尝试用游戏的画布来做到这一点颤抖和坐立不安 我用读取像素方法从context 这是我尝试过的 var examp
  • 我可以像在asp.net core mvc中一样使用service在blazor中操作dbcontext吗?

    在我的asp net core mvc项目中 我通常会使用这个服务来进行业务操作 services AddDbContextPool
  • 循环 switch 语句

    我是 C 新手 我在控制台应用程序中有一个 菜单 现在 当我完成从菜单中选择一个项目并执行该菜单项所需的操作时 我想循环并再次显示菜单 以便用户可以选择不同的菜单项 我的菜单上有一个退出选项 我只想用它来退出 我尝试过 while 循环 但
  • Netbeans插件解析api

    如何安装netbeans插件解析API 以下是我尝试在 Netbeans 中安装 按需扫描 插件时出现的错误 Some plugins require plugin Parsing API to be installed The plugi
  • bash 包装器将 stderr 设为红色

    Bash 支持颜色 即 033 31m切换到红色并且 033 0m切换回无色 我想制作一个小型的 bash 包装器 它可以可靠地将 stderr 输出为红色 即它应该将 033 31m之前和 033 0m在来自 stderr 的所有内容之后