Linux中重定向应注意的事情
引言
你是否见过bash ... 2>&1 1>file.txt
的写法? 还没发现这样的写法有什么问题? 那么恭喜你, 看完本文你又将学会一个新知识!
重定向的错误用法
以引言中命令为例, 2>&1
表示将错误输出重定向到标准输出, 1>file.txt
表示将标准输出重定向到file.txt
文件, 看起来的意思就是将标准输出和错误输出全都重定向到file.txt
?
错啦! 上述命令只会标准输出重定向到file.txt
文件, 而错误输出还是重定向到终端(或者叫做命令行, 控制台, 屏幕). 因为首先解析的是2>&1
,此时的1
指向的还是标准输出, 即终端, 解析到1>file.txt
时, 标准输出才被重定向到file.txt
. 下面我将用一个例子来验证我的结论:
test.sh
是一个简单的脚本, 会把STDOUT
输出到标准输出, 将STDERR
输出到错误输出
$ cat test.sh
echo 'STDOUT' >&1
echo 'STDERR' >&2
我们先验证脚本的正确性, 标准输出和错误输出都被正确的捕捉到了, 脚本可以同时输出标准输出和错误输出, 正确性得以验证.
现在我们再来验证我一开始的结论, 执行bash ... 2>&1 1>file.txt
形式的命令, 可以看到错误输出STDERR
被输出到了终端, 而file.txt
中仅有标准输出STDOUT
那么应该怎么改成我们想要的结果呢? 很简单, 将2>&1
和1>file.txt调换个位置即可, 即bash ... 1>file.txt 2>&1
; 或者使用bash ... &>file.txt
, 都可以达到我们想要的效果
重定向另外一个值得注意的事项
重定向另外一个需要注意的事项就是: 执行类似于command > file.txt
的命令时, 会首先判断file.txt
是否存在, 若存在则先清空文件, 若不存在则创建文件, 随后才会执行command
假设有一个已经排好序的文件file.txt
, 我们对这个文件去重的话, 执行uniq file.txt > file.txt
会直接清空文件
想要不生成额外的临时文件做到去重的话, 正确的做法应该是使用管道|
配合tee
命令, 而不是使用重定向
Linux中重定向应注意的事情的更多相关文章
- Linux中重定向及管道
1重定向1.1 重定向符号 > 输出重定向到一个文件或设备 覆盖原来的文件 >! 输出重定向到一个文件或设备 强制覆盖原来的 ...
- linux中重定向的用法
用法: 1> | > file:标准输出覆盖重定向(先清空文件,后加入内容) 1>> | >> file:标准输出追加重定向(将内容追加到文件的末尾) 2> ...
- Linux中重定向
转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1 重定向符号 > 输出 ...
- Linux中重定向--转载
转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1 重定向符号 > 输出 ...
- Linux中重定向命令行
http://www.ahlinux.com/start/base/3170.html
- <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向
[root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...
- linux中的输入从定向和输出重定向
linux的标准的输入和输出为如下 我们在 linux中执行命令时,命令默认输出到console中,很多时候我们需要将命令输出到其他设备上如最常见的就文件中去,或者重文件中输入.那这时候就需要用到li ...
- linux中nginx重定向方法总结
linux中nginx 301重定向跳转方法总结 第一种情况:访问aaaaaaa站定向到bbbbbbbbbbb站 复制代码代码如下: server { server_naaaaaaame www.aa ...
- Linux中shell基础、重定向、管道符、环境变量
1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核去执行.起着协调用户与系统的一致性和在用户与系统之间进行交互的 ...
- Linux中的数据重定向
重定向即指:将数据传送输出到别的地方,如设备.文件等等.那就涉及到将什么数据传送到什么地方的问题. 在linux中命令执行的起源和结果说起,看下图: Standard input和Standard e ...
随机推荐
- python之pyqt5-第一个pyqt5程序-图像压缩工具(2.5版本,加入多线程进度条与文件drop)-小记
(如想转载,请联系博主或贴上本博地址) 题外:关于python的多线程 python因为GIL的原因,只能利用到单核CPU性能.如程序内多是计算或循环,多线程无啥意义:如程序内多IO操作,多线程可以避 ...
- SpringBoot——实现WebService接口服务端以及客户端开发
参考:https://blog.csdn.net/qq_43842093/article/details/123076587 https://www.cnblogs.com/yinyl/p/14197 ...
- 看图就会-react条件渲染的5种方式
- IOS开发基础之核心动画 基础动画、关键帧、组动画案例
// // ViewController.m // 30-核心动画 // // #import "ViewController.h" @interface ViewControll ...
- GO语言学习笔记-方法篇 Study for Go ! Chapter five - Method
持续更新 Go 语言学习进度中 ...... GO语言学习笔记-类型篇 Study for Go! Chapter one - Type - slowlydance2me - 博客园 (cnblogs ...
- JDK 7 HashMap 并发情况下的死锁问题
目录 问题描述 详细解释 问题描述 JDK7的 HashMap 解决冲突用的是链表,在插入链表的时候用的是头插法,每次在链表的头部插入新元素.resize() 的时候用的依然是头插,头插的话,如果某个 ...
- Day04笔记
01.explicit的作用(了解) class Maker { public: //explicit只能放在构造函数前面,构造函数只有一个参数或其他参数有默认值时 explicit Maker(in ...
- 万字血书Vue—Vue语法
模板语法 插值语法 Mustache插值采用{{ }},用于解析标签体内容,将Vue实例中的数据插入DOM中 <h1>Hello {{name}}</h1> 指令语法 指令用于 ...
- 跳出思维的“盒子”,聊聊 RTE 应用创新大赛的那些作品
由声网Agora 与环信联合主办的"RTE 2021 编程挑战赛"已圆满落幕.在今年的大赛中,来自行业中不同领域的专家参与了决赛评选,包括 Linux 中国技术社区技术负责人 白宦 ...
- es6数组相关操作
1. 获取两个数组中某个属性值相等的项 let a=[{name:1},{name:4},{name:3}] let b=[{name:5},{name:4},{name:2}] let index ...