如何在 Bash 中将 stderr 重定向到 stdout

2023-11-19

将命令的输出重定向到文件或通过管道将其传输到另一个命令时,您可能会注意到错误消息打印在屏幕上。

在 Bash 和其他 Linux shell 中,当程序执行时,它使用三个标准 I/O 流。每个流都由一个数字文件描述符表示:

  • 0 - stdin,标准输入流。
  • 1 - stdout,标准输出流。
  • 2 - stderr,标准错误流。

文件描述符只是代表打开文件的数字。

输入流通常通过在键盘中键入来向程序提供信息。

程序输出进入标准输入流,错误消息进入标准错误流。默认情况下,输入流和错误流都会打印在屏幕上。

重定向输出#

重定向是一种捕获程序输出并将其作为输入发送到另一个程序或文件的方法。

可以使用以下命令重定向流n>运算符,其中n是文件描述符号。

When n被省略,则默认为1,标准输出流。例如,以下两个命令是相同的;两者都会重定向命令输出(stdout) 到文件。

command > file
command 1> file

重定向标准错误(stderr) 使用2>操作员:

command 2> file

你可以两者都写stderr and stdout到两个单独的文件:

command 2> error.txt 1> output.txt

要禁止错误消息显示在屏幕上,请重定向stderr to /dev/null:

command 2> /dev/null

重定向stderr to stdout #

将程序的输出保存到文件时,重定向是很常见的stderr to stdout这样您就可以将所有内容都保存在一个文件中。

重定向stderr to stdout并将错误消息发送到与标准输出相同的文件,请使用以下命令:

command > file 2>&1

> file重定向stdout to file, and 2>&1重定向stderr到当前位置stdout.

重定向的顺序很重要。例如,以下示例仅重定向stdout to file。发生这种情况是因为stderr被重定向到stdout之前stdout被重定向到file.

command 2>&1 > file 

另一种重定向方式stderr to stdout是使用&>构造。在重击中&>具有相同的含义2>&1:

command &> file

结论#

在命令行上工作时,理解重定向和文件描述符的概念非常重要。

重定向stderr and stdout, 使用2>&1 or &>结构体。

如果您有任何问题或反馈,请随时发表评论。

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

如何在 Bash 中将 stderr 重定向到 stdout 的相关文章

  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 文本处理问题:删除其中一列不包含特定值的行

    我有一个制表符分隔的文件 如下所示 input sequence match sequence score receptor group epitope antigen organism ASRPPGGVNEQF ASRPPGGVNEQF
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 如何在 Mac 上设置默认 shell,例如钓鱼? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不喜欢重新输入fish每次我启动终端时 我想Fish https en wikipedia org wiki Fish Unix she
  • 在谷歌云上训练神经网络时出现“无法获取路径的文件系统”错误

    我正在使用 Google Cloud 在云上训练神经网络 如下例所示 https cloud google com blog big data 2016 12 how to classify images with tensorflow u
  • 如何在 Visual Studio Code 中从集成终端引用当前文件

    我想知道是否可以 使用内置变量 直接使用集成终端在 Visual Studio 中打开的当前文件 例如 gt some command current file Where current file would be a built in
  • powershell stdin 管道和重定向

    你好 我一直在制作一个小的跨平台脚 本 我可以将其卷曲并通过管道传输到bash和Powershell中 基本思想是服务器向解释器发送一个命令 然后它给出一个命令将所有输出重定向到标准输出 bash 中的一个例子是 some commands
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 如何将环境变量 PACKAGE_DIRS 链接到我的本地私有包?

    我正在尝试设置一个环境变量 以便当我正在处理 Meteor 应用程序时 并且我想将本地私有包链接到我的项目 Meteor 将查找我在本地环境中创建的包目录 我做的第一件事是创建一个包目录并向其中添加一个基本的测试包 Users scotty
  • VS Code 即使关闭也使用 100% CPU

    即使未打开 VS Code 也会占用 100 的 CPU 使用率 我跑了ps aux grep PID命令查看详细信息但什么也看不懂 这是输出 tawhid 27099 100 0 0 1 447352160 11856 R 7 18PM
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • grep 两个分隔符之间的子字符串

    我有很多bash使用的脚本perl内的表达式grep为了提取两个分隔符之间的子字符串 例子 echo BeginMiddleEnd grep oP lt Begin End 问题是 当我将这些脚本移植到运行的平台时busybox 融合的 g
  • bash 行长度限制从何而来?

    在运行 Bash 4 4 19 标准安装 的 Solaris 11 上 输入行似乎有 256 个字符的限制 我想了解这个限制从何而来 我浏览了手册页 但没有找到任何解决此问题的内容 仅当未使用 readline 库时才会发生这种情况 在下面
  • 有没有办法让我简化这些回声? [复制]

    这个问题在这里已经有答案了 我仍在学习如何编写 shell 脚本 并且我面临着一个挑战 让我更容易回显 Name1 Name2 Name15 我不太确定从哪里开始 我已经想法 但如果我搞砸了 我不想看起来很傻 有什么帮助吗 我实际上还没有尝
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • 在 bash 脚本中提取 XML 值 [重复]

    这个问题在这里已经有答案了 我正在尝试从 xml 文档中提取一个值 该文档已作为变量读入我的脚本中 原始变量 data is
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug

随机推荐

  • 如何在不终止 Linux 上正在运行的进程的情况下关闭终端

    例如 您正在运行耗时的进程 并且您不希望该作业由于终端关闭而被终止 要处理这种情况 您只需从活动作业表中删除作业即可 这样当终端关闭时作业就不会被杀死 指示 按照以下说明从终端分离正在运行的作业 1 Press CTRL Z to susp
  • 如何允许远程访问 Tomcat 管理器

    Apache Tomcat 是一种广泛使用的开源 Java Servlet 容器 允许您托管和管理基于 Java 的 Web 应用程序 Tomcat Manager 是一个基于 Web 的界面 提供用于管理已部署应用程序的管理工具 默认情况
  • DUF – 适用于 Linux、BSD 和 macOS 的跨平台磁盘使用/免费实用程序

    随着数据的指数级增长 管理存储和分析磁盘使用情况已成为系统管理员和日常计算机用户的一项基本任务 了解磁盘空间的利用方式有助于您优化系统并就存储分配做出明智的决策 DUF 即磁盘使用 空闲实用程序 是一款功能强大的跨平台工具 旨在帮助您做到这
  • 如何在 Shell 脚本中检查 Python 版本

    Python 是由 Guido van Rossum 创建的一种高级通用编程语言 它于 1991 年首次发布 通常 基于 Linux 的发行版都预装了 Python 版本 本教程将帮助您在脚本中查找 Python 版本详细信息 此外 您还可
  • 如何在 Debian 11 上安装和配置 Fail2ban

    每台可通过互联网访问的服务器都面临着遭受暴力破解和恶意软件攻击的巨大风险 黑客尝试使用暴力尝试来访问可在公共网络上访问的应用程序 Fail2ban 是一种工具 用于通过提高基于 Linux 的计算机的安全性来保护其免受自动攻击 它监控任何恶
  • 使用 MySQL 中的预准备语句防止 SQL 注入攻击

    SQL 注入攻击是当今 Web 应用程序面临的最常见的安全威胁之一 当恶意行为者使用特制的输入来操纵数据库查询并获得对敏感数据的未经授权的访问时 就会发生这些攻击 为了防止 SQL 注入攻击 开发人员可以在 MySQL 中使用准备好的语句
  • 如何在 Bash 脚本中使用 ${} 提取子字符串

    Bash Bourne Again SHell 是一种流行的 shell 脚本语言 尤其是在 Linux 和 Unix 世界中 shell 脚本中最常见的任务之一是操作字符串 包括从给定字符串中提取子字符串 在本文中 我们将探讨如何使用强大
  • 如何在 Fedora 34/33 上安装 Magento2

    Magento 是最好的企业级电子商务软件和解决方案 它由开放 灵活的下一代架构提供支持 使用 Magento 开发的应用程序将为用户提供最佳且引人入胜的购物体验 其性能优于其他可用的电子商务应用程序 Magento 2 是最新版本 该版本
  • 什么是 SHA-256 算法?

    安全哈希算法 256 位 SHA 256 是 SHA 2 安全哈希算法 2 系列中的加密哈希函数之一 由美国国家安全局 NSA 设计并于2001年首次发布 广泛应用于各种安全应用和系统 在深入了解 SHA 256 的细节之前 我们首先了解什
  • 如何在 Fedora 和 RHEL 系统中安装 Google Chrome

    Google Chrome 是一款功能强大 快速且流行的网络浏览器 以其简约的设计和强大的功能套件而闻名 虽然 Fedora 和 Red Hat Enterprise Linux RHEL 系统配备了默认的 Web 浏览器 大多数情况下为
  • 如何在 Ubuntu 上创建 sudo 用户

    The sudo命令旨在允许用户以另一个用户 默认为 root 用户 的安全权限运行程序 在本指南中 我们将向您展示如何在 Ubuntu 系统上创建具有 sudo 访问权限的新用户 然后 您可以使用此用户帐户执行管理命令 而无需以 root
  • Linux 中的 lsmod 命令(列出内核模块)

    lsmod是一个命令行实用程序 显示有关已加载的 Linux 内核模块的信息 内核模块 内核是操作系统的核心组件 它管理系统的资源 是计算机硬件和软件之间的桥梁 Linux内核采用模块化设计 内核模块 通常称为驱动程序 是扩展内核功能的一段
  • 如何 Grep 查找多个字符串和模式

    grep是一种功能强大的命令行工具 允许您在一个或多个输入文件中搜索与正则表达式匹配的行 并将每个匹配行写入标准输出 在本文中 我们将向您展示如何使用 GNUgrep搜索多个字符串或模式 Grep 多种模式 GNU grep支持三种正则表达
  • 如何在Linux上挂载ISO文件

    ISO 文件是一种存档文件 通常包含 CD 或 DVD 的完整映像 例如 大多数操作系统 例如 Windows Linux 和 macOS 都以 ISO 映像的形式分发 ISO 文件可以使用流行的存档程序提取 安装在循环设备上并写入 USB
  • 如何在 Ubuntu 18.04 上安装 Ruby

    Ruby 是当今最流行的语言之一 它具有优雅的语法 并且是强大的 Ruby on Rails 框架背后的语言 在本教程中 我们将向您展示在 Ubuntu 18 04 系统上安装 Ruby 的三种不同方法 先决条件 在开始学习本教程之前 请确
  • 使用 PuTTYgen 在 Windows 上生成 SSH 密钥

    Secure Shell SSH 是一种加密网络协议 用于客户端和服务器之间的安全连接 支持各种身份验证机制 两种最流行的机制是基于密码的身份验证和基于公钥的身份验证 使用 SSH 密钥比传统的密码身份验证更安全 更方便 本教程介绍如何使用
  • 如何在 CentOS 7 上设置 Apache 虚拟主机

    Apache 虚拟主机允许多个网站在一台 Web 服务器上运行 使用虚拟主机 您可以指定站点文档根 包含网站文件的目录 为每个站点创建单独的安全策略 为每个站点使用不同的 SSL 证书等等 在本教程中 我们将提供有关如何在 CentOS 7
  • Linux 文件命令

    Linuxfile命令显示文件的类型 当您必须找出以前从未见过的文件类型或文件没有文件扩展名时 这会很有帮助 Linux 文件命令语法 Linux 的语法file命令如下 file OPTION FILE 它可以采用一个或多个文件名作为其参
  • 如何在 Ubuntu 20.04 上配置静态 IP 地址

    本文介绍如何在 Ubuntu 20 04 上设置静态 IP 地址 通常 在大多数网络配置中 IP 地址由路由器 DHCP 服务器动态分配 在不同情况下可能需要设置静态 IP 地址 例如配置端口转发或运行媒体服务器 使用 DHCP 配置静态
  • 如何在 Bash 中将 stderr 重定向到 stdout

    将命令的输出重定向到文件或通过管道将其传输到另一个命令时 您可能会注意到错误消息打印在屏幕上 在 Bash 和其他 Linux shell 中 当程序执行时 它使用三个标准 I O 流 每个流都由一个数字文件描述符表示 0 stdin 标准