引言

你是否见过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中重定向应注意的事情的更多相关文章

  1. Linux中重定向及管道

    1重定向1.1      重定向符号 >               输出重定向到一个文件或设备 覆盖原来的文件 >!              输出重定向到一个文件或设备 强制覆盖原来的 ...

  2. linux中重定向的用法

    用法: 1> | > file:标准输出覆盖重定向(先清空文件,后加入内容) 1>> | >> file:标准输出追加重定向(将内容追加到文件的末尾) 2> ...

  3. Linux中重定向

    转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1      重定向符号 >               输出 ...

  4. Linux中重定向--转载

    转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1      重定向符号 >               输出 ...

  5. Linux中重定向命令行

    http://www.ahlinux.com/start/base/3170.html

  6. <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向

    [root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...

  7. linux中的输入从定向和输出重定向

    linux的标准的输入和输出为如下 我们在 linux中执行命令时,命令默认输出到console中,很多时候我们需要将命令输出到其他设备上如最常见的就文件中去,或者重文件中输入.那这时候就需要用到li ...

  8. linux中nginx重定向方法总结

    linux中nginx 301重定向跳转方法总结 第一种情况:访问aaaaaaa站定向到bbbbbbbbbbb站 复制代码代码如下: server { server_naaaaaaame www.aa ...

  9. Linux中shell基础、重定向、管道符、环境变量

    1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核去执行.起着协调用户与系统的一致性和在用户与系统之间进行交互的 ...

  10. Linux中的数据重定向

    重定向即指:将数据传送输出到别的地方,如设备.文件等等.那就涉及到将什么数据传送到什么地方的问题. 在linux中命令执行的起源和结果说起,看下图: Standard input和Standard e ...

随机推荐

  1. MyBatis-Plus插入值后返回主键

    LZ做练手设计的时候有这样一个订单需求,先插入订单表数据(t_order),再写入订单详情表(t_orderDetail),详情表需要有一个与t_order的外键约束 t_order ( oid    ...

  2. List<dto> 转List<map>

    /** * list<DTO> 转 list<Map<String,Object>> * * @param list * @param <T> * @r ...

  3. 替代if esle 的高级方法

    if else 是入门最常遇到的一种结构,这种结构简单易懂,深受初学者喜爱.但是 If-Else通常是一个糟糕的选择. 它的可读性差,如果用的太多,会导致结构重构困难.今天我就介绍替代 If-Else ...

  4. python之自动化连连看脚本-第一关不动-小记

    (如想转载,请联系博主或贴上本博地址) 仅供学习python之用,勿用做商业用途.运行环境为1920*1080屏幕,python3.7,win7,谷歌浏览器版本 75.0.3770.100. 参考ht ...

  5. Unity2017-HTC项目串流Pico摇杆移动功能

    最近公司PC项目需要串流到Piconec3上运行,HTC手柄是圆盘键按下移动还可以,但是Piconeo3是摇杆,按下移动的话显得不科学,所以写了一套基于圆盘键,使用摇杆移动的方法 第一步:编写摇杆左右 ...

  6. jQuery下载步骤以及相关使用

    jQuery下载 进入相关网址执行下载操作,网址在这里:http://www.jq22.com/jquery-info122 进入页面之后,页面的左侧,会有这样的显示: 我们需要自主在这里选择自己需要 ...

  7. SpringBoot笔记--自动配置(高级内容)(上集)

    原理分析 自动配置 Condition--增加的条件判断功能 来一个案例说明: 具体实现: 没有要求的话,就是这样的: Config.java User.java SpringLearnApplica ...

  8. 针对于Sql server突然连接不到服务器的解决方法

    问题叙述 点击连接之后,总是会弹出一个错误弹窗: 方法解决 快捷键Win+R,输入services.msc,进入到服务界面: 找到SQL 代理(DEV) 将手动打开改成自动 再连接试一次 连上啦! ( ...

  9. UI界面实现SSH登录服务器并执行命令监控

    一.通过paramiko实现SSH远程登录服务器.执行命令并返回信息: 二.通过wxpython实现UI化: 三.代码实现如下: 1)主程序MainUI #coding:utf8 #!/usr/bin ...

  10. 新版TinyCore Linux系统安装

    1.设置软件仓库源echo "https://mirrors.163.com/tinycorelinux">/opt/tcemirror 2.安装启动加载器及其依赖tce-l ...