Shell重定向 &>file、2>&1、1>&2 、/dev/null的区别

2023-11-17

在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 。

>  默认为标准输出重定向,与 1> 相同
2>&1  
意思是把 标准错误输出 重定向到 标准输出.

&>file  意思是把标准输出标准错误输出 都重定向到文件file中

/dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉

举例说明:

当前目录只有一个文件 a.txt.
[root@redhat box]# ls
a.txt
[root@redhat box]# ls a.txt b.txt
ls: b.txt: No such file or directory 由于没有b.txt这个文件, 于是返回错误值, 这就是所谓的2输出
a.txt 而这个就是所谓的1输出

再接着看:

[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err
执行后,没有任何返回值. 原因是, 返回值都重定向到相应的文件中了,而不再前端显示
[root@redhat box]# cat file.out
a.txt
[root@redhat box]# cat file.err
ls: b.txt: No such file or directory
一般来说, "1>" 通常可以省略成 ">".
即可以把如上命令写成: ls a.txt b.txt >file.out 2>file.err
有了这些认识才能理解 "1>&2" 和 "2>&1".
1>&2 正确返回值传递给2输出通道 &2表示2输出通道
如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.
举个例子.
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
[root@redhat box]# cat file.out
ls: b.txt: No such file or directory
a.txt
现在, 正确的输出和错误的输出都定向到了file.out这个文件中, 而不显示在前端.
补充下, 输出不只1和2, 还有其他的类型, 这两种只是最常用和最基本的.

例如:
rm -f $(find / -name core) &> /dev/null,/dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉。

例如:
注意,为了方便理解,必须设置一个环境使得执行grep da *命令会有正常输出和错误输出,然后分别使用下面的命令生成三个文件:
grep da * > greplog1
grep da * > greplog2 1>&2   
grep da * > greplog3 2>&1  //grep da * 2> greplog4 1>&2 结果一样
#查看greplog1会发现里面只有正常输出内容
#查看greplog2会发现里面什么都没有#查看greplog3会发现里面既有正常输出内容又有错误输出内容

 

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

Shell重定向 &>file、2>&1、1>&2 、/dev/null的区别 的相关文章

  • 如何在 android studio 中监听 shell 命令的响应?

    在 Android 终端模拟器中 我可以输入以下命令 gt su gt echo class power supply battery charge rate 根据手机的充电方式 输出将为 无 正常 或 涡轮 我希望能够检索此输出并存储它作
  • 从 PHP 启动交互式 SSH bash 会话

    我正在使用 PHP 编写常见服务器管理任务的快捷方式 我正在使用deployer org 但这应该不重要 我想添加一个任务 用于在通过 SSH 连接到服务器后启动交互式 bash 提示符 例如 您将运行 dep ssh 其中 dep 是一个
  • 在snakemake规则中使用pyenv

    我正在使用 Snakemake 来实现一个漫长而复杂的管道 其中涉及一些外部编写的 python2 脚本 当我尝试使用 pyenv 指定 python2 时 pyenv shell命令失败 同时pyenv global and pyenv
  • if ["$i" -gt "$count"];出现错误

    我试图将 f count f 1 f 2 名称放入数组中 下面是代码 echo Enter the count read count echo count arr i 1 while true do if i gt count then e
  • bash:从数组中删除变量? [复制]

    这个问题在这里已经有答案了 bin bash tank one two three x two unset tank x echo tank 我想从数组中删除 x 但不知何故它删除了数组的第一个元素 我该如何解决这个问题 您有一个索引数组
  • Emacs 退出终端

    在 Emacs 中运行终端模式时使用M x term using C x C o我无法切换到另一个缓冲区来继续处理事情 我知道这是可能的M x shell但使用此命令时 shell 的某些方面不起作用 less more 手册页等 我想知道
  • 如何通过管道将输入和输出传送到交互式 shell?

    我正在尝试构建一个应用程序 使用户能够与命令行交互式 shell 例如 IRB 或 Python 进行交互 这意味着我需要将用户输入通过管道传输到 shell 并将 shell 的输出返回给用户 我希望这会像管道 STDIN STDOUT
  • 如何在c#中使用net user

    我正在尝试将 net user 与 c 一起使用 System Diagnostics ProcessStartInfo proccessStartInfo new System Diagnostics ProcessStartInfo n
  • “排序文件名 | uniq”不适用于大文件

    我可以从小文本文件中删除重复条目 但不能从大文本文件中删除重复条目 我有一个 4MB 的文件 文件的开头如下所示 aa aah aahed aahed aahing aahing aahs aahs aal aalii aalii aali
  • 为什么我不能在 while 循环内评估?

    我想在循环中创建 bash 别名 其中循环从命令读取行 为了逐行读取输出 我相信我需要将输出通过管道传输到read 然而 当我这样做时 别名不存在 如果我将以下内容包含在我的 bashrc for x in a1 a2 do eval al
  • 在 Linux 中使用仅限 CLI 的工具生成磁盘使用情况图/图表

    在这个问题中 https stackoverflow com questions 32230 tracking down where disk space has gone on linux有人询问如何在 Linux 中显示磁盘使用情况 我
  • 如何检测文本文件中大于 n 的一系列“空洞”(孔、与模式不匹配的线)?

    Case scenario cat Status txt 1 connected 2 connected 3 connected 4 connected 5 connected 6 connected 7 disconnected 8 di
  • 将 sudo 与 Python 脚本结合使用

    我正在尝试编写一个小脚本来在每次执行脚本时安装 VirtualBox 共享文件夹 我想用Python 来做这件事 因为我正在尝试学习它来编写脚本 问题是我需要特权才能启动挂载命令 我可以将脚本作为 sudo 运行 但我更喜欢它自己创建 su
  • 使用 shell 脚本在 docker 容器内运行脚本

    我正在尝试创建一个 shell 脚本来设置 docker 容器 我的脚本文件如下所示 bin bash docker run t i p 5902 5902 name mycontainer privileged myImage new b
  • 如何获取与文件类型关联的图标路径和索引?

    给定一个文件类型 例如 txt 我怎样才能得到 path index 文件类型的关联图标路径和索引 例如 我想转换 txt into Path SystemRoot system32 imageres dll Index 102 有了这些信
  • subprocess.Popen args 参数的最大长度是多少?

    我在用Popen http docs python org library subprocess html using the subprocess modulesubprocess 模块中的函数来执行命令行工具 subprocess Po
  • 如何从 C 函数创建 shell 命令

    想知道如何获取一组 C 函数并将它们转换为 shell bash 命令 假设我有一组简单的 C 函数 int fn1 some C code for function 1 int fn2 some C code for function 2
  • 编写脚本时,#!/usr/bin/perl 和 #!/usr/bin/env perl 有什么区别?

    显然 这同样适用于用 python bash sh 等替代 perl 昆汀下面的答案显然是正确的 所以我接受了它 但我想我实际上的意思是 两种使用 的方式的优点和缺点是什么 调用 perl python bash 作为脚本的解释器 有人提到
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123
  • shell脚本“x$VARIABLE”中x的用途[重复]

    这个问题在这里已经有答案了 我正在查看一些 shell 脚本 comarison shcu 中 x 的用途是什么 if x USER x RUN AS USER then su RUN AS USER c CATALINA HOME bin

随机推荐

  • Vue3 Cannot read properties of undefined (reading ‘use‘)

    在用vue3脚手架搭建项目的时候 配置路由 一直报错 错误代码不显示了 正确代码 min js import createApp from vue import App from App vue import Router from rou
  • Linux系统使用 NetworkManager 工具来管理网络

    使用 NetworkManager 工具来管理网络 其在命令行下对应的命令是 nmcli 要连接WiFi 相关的命令如下 1 查看网络设备列表 sudo nmcli dev 注意 如果列出的设备状态全部是 unmanaged 的 说明这些网
  • 单纯记录一下主题色样式——笔记

    单纯想 记录一下这个主题样式的设置 HTML代码
  • Prometheus: 通过ConfigMap来添加Grafana仪表盘

    如果你通过kube prometheus stack部署了Prometheus Grafana 那么Grafana中的仪表盘就是通过边车 sidecar 来动态获取的 Sidecar的观察对象是ConfigMap 当ConfigMap中配置
  • JavaFx如何打成exe包并设置exe的图标

    JavaFx如何打成exe包并设置exe的图标 javaFx在本地运行没问题后 想打成exe包 并在没有jdk的环境下使用 可参考以下操作 在pom中添加如下maven插件
  • 利用qt 信号槽传递自定义结构体--借助QVariant

    在前面的博客里 我介绍了利用Q DECLARE METATYPE和qRegsterMetaType来传递自定义的结构体 但是这样做有个缺点 qRegisterMetaType 只能在main 函数里才能发挥作用 https blog csd
  • Towards Open Set Deep Networks:开放世界的目标检测

    文章发表于2016年 文章链接 1 概述 随着深度网络在目标检测领域的发展 网络的性能和准确率都在不断提升 但是存在的一个问题 深度网络很容易被一些图片 在人类看来没有意义 所欺骗 即使我们觉得该图像并不属于某一类别 但是深度网络还是会以高
  • yii2+ueditor百度富文本编辑器+七牛云单图多图均可

    ueditor百度富文本版本 1 4 3 yii2七牛云SDK yii2安装及使用七牛云文件上传 第一步 打开 web ueditor php Uploader class php文件在最顶部引入 yii2安装及使用七牛云文件上传 内com
  • SQL Server 列转行函数 UNPIVOT(大数据)

    SQL Server 列转行函数 UNPIVOT 大数据 在 SQL Server 中 UNPIVOT 是一种用于将列转换为行的函数 它可以帮助我们重新组织和分析数据 本文将详细介绍 UNPIVOT 函数的使用方法以及如何在处理大数据时进行
  • Kafka/Spark消费topic到写出到topic

    1 Kafka的工具类 1 1 从kafka消费数据的方法 消费者代码 def getKafkaDStream ssc StreamingContext topic String groupId String consumerConfigs
  • Git merge并push到远程分支,但又要回滚到merge之前的代码

    1 使用git reflog 查看所有HEAD历史 2 观察日志列表内容 找到这次merge 之前 git log 例 ce7397d8 HEAD 36 commit merge Merge branch develop into rele
  • 编译失败:内部java编译器错误

    idea编译java报错 信息 Eclipse编译器4 6 2用于编译java源 信息 模块sinoWeb由于项目配置 依赖项更改而完全重建 信息 2017 3 23 11 44 编译完成 1个错误 0个警告 5分32秒949ms 错误 j
  • 力扣 - 102、二叉树的层序遍历(剑指Offer - 面试题32:从上到下打印二叉树)

    题目 给你一个二叉树 请你返回其按 层序遍历 得到的节点值 即逐层地 从左到右访问所有节点 示例 二叉树 3 9 20 null null 15 7 3 9 20 15 7 输出层序遍历的结果 3 9 20 15 7 分析 迭代法 用一个队
  • 数据结构——第六章 图

    知识框架 主要掌握深度优先搜索和广度优先搜索 图的基本概念及基本性质 图的存储结构 邻接矩阵 邻接表 邻接多重表和十字链表 及其特性 存储结构之间的转化 基于存储结构上的遍历操作和各种应用 拓扑排序 最小生成树 最短路径和关键路径 等 通常
  • npm 常用操纵

    以下操作均已 mkdirp 模块为例 npm模块库查询 1 远程仓库查询 a 查询仓库中模块的信息 npm info mkdirp 查看大图 b 查询仓库中模块的所有版本 npm view mkdirp versions 查看大图 c 查看
  • Pid算法总结笔记(平衡小车部分)

    Pid的三种形式 直立环 速度环 转向环 这三种环代表了小车的三种不同动作 直立 转向 和运行速度 三种不同的构造 三种不同的控制函数 最终的思想都是通过pid算法来控制 一 Pid算法简介 什么是pid Pid总共有三个字符 分别是p i
  • [Python系列-8]:Python之人工智能 - 基本工具 -2- 随机数生成库

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https mp csdn net mp blog creation editor 119254076 目录 1 什么需要随机数生成
  • Echarts的tooltip显示自定义格式化解决方案

    前言 今天甲方爸爸提出了要求 需要把图表显示的数据保留百分数的小数点后一位 实际上这个显示的问题之前在后台处理数据的时候就处理过 当时是没有保留小数的 后来要求保留小数点后一位就在后台处理了 谁知道 在前台展示的时候 莫名的出现小数点后十几
  • 大数据分析R中泊松回归模型实例

    如果您知道如何以及何时使用泊松回归 它可能是一个非常有用的工具 在大数据分析R中泊松回归模型实例中 我们将深入研究泊松回归 它是什么以及R程序员如何在现实世界中使用它 具体来说 我们将介绍 1 泊松回归实际上是什么 什么时候应该使用它 2
  • Shell重定向 &>file、2>&1、1>&2 、/dev/null的区别

    在shell脚本中 默认情况下 总是有三个文件处于打开状态 标准输入 键盘输入 标准输出 输出到屏幕 标准错误 也是输出到屏幕 它们分别对应的文件描述符是0 1 2 gt 默认为标准输出重定向 与 1 gt 相同 2 gt 1 意思是把 标