重定向命令其实用得不少吧,只是重来都没有仔细看过,这波正好又用到 又有空总结一波。

先看>和>>:

他们俩其实唯一的区别就是>是重定向到一个文件,>>是追加内容到文件。两个命令都是如果文件不存在则创建文件。举个例子来看看:

(thrift_rpc)piperck➜  Desktop  ᐅ  ll >> .txt
(thrift_rpc)piperck➜ Desktop ᐅ ll | grep .txt
-rw-r--r-- piperck staff .8K Dec : .txt

可以看到可以将ll的输出 重定向到123.txt中, >也是同样的效果。只是如果使用>执行重定向的位置没有这个文件

(thrift_rpc)piperck➜  Desktop  ᐅ  ls > /poweqpikp/
zsh: no such file or directory: /poweqpikp/
(thrift_rpc)piperck➜ Desktop ᐅ ls >> /poweqpikp/
zsh: no such file or directory: /poweqpikp/
(thrift_rpc)piperck➜ Desktop ᐅ ls >
(thrift_rpc)piperck➜ Desktop ᐅ ls >>

但是如果你重定向的是没有的文件夹里面的文件,那么文件夹他是不会帮你创建的,所以会报出错误,这点要注意。

然后是 1>、 2>、 1>>、 2>>的使用,

当我们需要把一个文件正确的输出,和错误的输出分开保存的时候就能用到他们啦。让我用一个简单的python脚本来做一个实验

python脚本如下

# coding: utf-8

if __name__ == '__main__':
print 'gogogog'
int('qiowjeioqwjeo')

该脚本会正确执打印gogogog 然后 报出下面强转的错误。

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1> right.txt 2> wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ ls
NS8A_client gevent pp.py starcraft2
baidu_phoneassist laplace_pra right.txt wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
(thrift_rpc)piperck➜ py_pra ᐅ cat wrong.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

可以看到,正确的输出被保存进了right.txt 而错误的输出被重定向到了wrong.txt 。

那么如果我们不区分1>2>这样的重定向规则,运行结果会被保存成什么样子呢?

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py > pp.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
(thrift_rpc)piperck➜ py_pra ᐅ cat pp.txt
gogogog

可以看到只保存了正确的结果,错误的信息被打印到标准输出上面。

那如果我们想让错误和正确的结果都被重定向到同一个文件又应该怎么做呢。

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1> ppp.txt 2>&1
(thrift_rpc)piperck➜ py_pra ᐅ cat ppp.txt
gogogog
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

可以看到,我们将错误也重定向到和1相同的文件 就实现了这个需求。

同理1>> 2>>其实也就是追加数据到文件中,和前面介绍的> >>没有什么不同,需要提到的一点是,如果我们想将错误的和正确的信息重定向追加到同一个文件应该怎么做呢?你可能会想到2>>&1。。。然而现实是,并没有这个语法。

然而我们却可以使用1>>pp.txt 2>&1的语法实现这个功能

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>> pp.txt 2>&1
(thrift_rpc)piperck➜ py_pra ᐅ cat pp.txt
gogogog
gogogog
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
gogogog
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

可见看似1> 1>> 2> 2>>是相一一对应的,但是其实不是,他们可以混用,比方说正确的结果想追加,错误的结果我想覆盖。

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>>right.txt 2>wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
(thrift_rpc)piperck➜ py_pra ᐅ cat wrong.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
(thrift_rpc)piperck➜ py_pra ᐅ python pp.py 1>>right.txt 2>wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
gogogog
(thrift_rpc)piperck➜ py_pra ᐅ cat wrong.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

类似这种组合混用的情况,相对来说也不少见。也可以看出重定向标识的灵活性。

那么如果我们想保存正确的结果,错误的结果直接丢向垃圾站,既不保存为文件,也不在标准输出打印又该怎么做呢?

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>>right.txt 2>/dev/null
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
gogogog
gogogog

直接将错误输出重定向到/dev/null 就好了,他就像一个无底洞,丢进去的东西就不见了。

那么<又是什么意思呢?<可以将原本由标准输入改为由指定地方输入举个例子就明白了:

(thrift_rpc)piperck➜  py_pra  ᐅ  vi hh
(thrift_rpc)piperck➜ py_pra ᐅ >> txt.py < hh
(thrift_rpc)piperck➜ py_pra ᐅ cat txt.py
qwejqwoijeoq

灵活使用重定向标识符 将极大方便我们日常对系统的操作,和灵活控制脚本的运作,所以一定要掌握哟!

Reference:

http://blog.chinaunix.net/uid-298599-id-2443108.html   Linux - 命令重定向

linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <的更多相关文章

  1. Linux - 命令重定向

    命令重定向, 就是将目前得到的数据转移到指定的地方.分为以下几种: >>>1>2>1>>2>>< 1. > 与 >>先看一 ...

  2. linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <(转)

    原文章地址:https://www.cnblogs.com/piperck/p/6219330.html >和>>: 他们俩其实唯一的区别就是>是重定向到一个文件,>&g ...

  3. LINUX常用命令--重定向、管道篇(四)

    一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...

  4. Linux输入输出重定向和文件查找值grep命令

    Linux输入输出重定向和文件查找值grep命令 一.文件描述符Linux 的shell命令,可以通过文件描述符来引用一些文件,通常使用到的文件描述符为0,1,2.Linux系统实际上有12个文件描述 ...

  5. linux 命令 htop & 重定向 top, bashrc文件

    最近在用linux服务器跑程序,有几条linux命令还蛮重要的,总结一下: 1. 直接跑代码: python test.py 2. 若想程序在后台跑,即使本地和服务器断开也能运行: nohup pyt ...

  6. Linux命令之文件重定向2

    linux中重定向用符号“>”表示,语法一般是 源文件 > 目标文件 1)创出.txt文件touch 1.txt 注意:创建文件夹用mkdir 2)向.txt文件中写入内容 注意:①cat ...

  7. Linux命令- echo、grep 、重定向、1>&2、2>&1的介绍

    最近笔试遇到一道题,关于Linux命令的,题目如下 下面两条命令分别会有怎样的输出 echo  hello 1>&2 |grep aaa echo  hello 2>&1 ...

  8. Linux入门之常用命令(6)Bash命令重定向 管线命令

    命令重定向 将目前所得数据转移到其他地方 >  将输出结果导入文件 如  ls -l / >test     (1)若test文件不存在则创建 (2)若test文件存在 清空后写入 > ...

  9. Linux实战教学笔记04:Linux命令基础

    第四节:Linux命令基础 标签(空格分隔):Linux实战教学笔记 第1章 认识操作环境 root:当前登陆的用户名 @分隔符 chensiqi:主机名 -:当前路径位置 用户的提示符 1.1 Li ...

随机推荐

  1. linux 磁盘 扩展分区

  2. SpringBoot项目单元测试

    关于SpringBoot的单元测试,描述一下三种单元测试的方式. 1.约定 单元测试代码写在src/test/java目录下单元测试类命名为*Test,前缀为要测试的类名 2. 使用mock方式单元测 ...

  3. 文件管理 - Ring3创建目录

    //多字符集 #include "stdafx.h" #include <Windows.h> #include <iostream> using name ...

  4. C++Primer第五版——习题答案详解(三)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第4章 表达式 练习4.10 while(cin>>i&&i ...

  5. 减肥标准BMI指数

    原文: https://baike.baidu.com/item/BMI%E6%8C%87%E6%95%B0/4477882?fromtitle=%E4%BD%93%E9%87%8D%E6%8C%87 ...

  6. Linux-Shell基础(变量,字符串,数组)

    一. 什么是shell shell是一个用C语言编写的程序,它是用户使用Linux的桥梁,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统 ...

  7. windows本地eclispe运行linux上hadoop的maperduce程序

    继续上一篇博文:hadoop集群的搭建 1.将linux节点上的hadoop安装包从linux上下载下来(你也可以从网上直接下载压缩包,解压后放到自己电脑上) 我的地址是: 2.配置环境变量: HAD ...

  8. VS2015密匙--VS2015打开丢失msvcp140.dll--cannot find one or more components ,please reinstall the application

    win7旗舰版 64位 + vs2015 专业版 1.安装VS2015过程中可能需要用到的VS2015专业版钥匙:(测试,可用) HMGNV-WCYXV-X7G9W-YCX63-B98R2 2.VS2 ...

  9. spring 之 注入之 by name or by type, or both ?

    @Autowired 和  @Qualifier 使用xml 注入的时候, 我们可以指定 autowire=“byType” 或“byName” . 但是使用 注解的时候, @Autowired  只 ...

  10. script 写在body和head的区别(WEUI中使用swiper删除)

    区别简述: 在HTML body部分中的JavaScripts会在页面加载的时候被执行.在HTML head部分中的JavaScripts会在被调用的时候才执行.   JavaScript应放在哪里 ...