重定向

Posted houbinglei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重定向相关的知识,希望对你有一定的参考价值。

重定向

熟悉几个特殊符号:

< :输入重定向
> :输出重定向
>> :输出重定向,进行追加,不会覆盖之前内容
<< :标准输入来自命令行的一对分隔号的中间内容.

示例:

 1.cat >file 记录的是键盘输入,相当于从键盘创建文件,并且只能创建新文件,不能编辑已有文件.>是数据重导向,会将你输入的文本内容输出到file中.

 cat >file <

 两条命令结合起来使用,既记录了键盘输入内容,同时又规定了结束符号之内的内容的范围
 xargs -n 1 < qqq



 <<EOF就是告诉shell脚本现在开始执行命令,当遇到EOF的时候结束命令。

 !跟命令指上一次的命令

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

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

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

(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>这样的重定向规则,运行结果会被保存成什么样子呢?

[[email protected]_test houbinglei]# python test.py > log.txt
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    func()
  File "test.py", line 3, in func
    int("abc")
ValueError: invalid literal for int() with base 10: ‘abc‘
[[email protected]_test houbinglei]# cat log.txt 
111

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

[[email protected]_test houbinglei]# python test.py 1 > log.txt 2>&1
[[email protected]_test houbinglei]# cat log.txt 
111
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    func()
  File "test.py", line 3, in func
    int("abc")
ValueError: invalid literal for int() with base 10: ‘abc‘

如果我们想将错误的和正确的信息重定向追加到同一个文件应该怎么做呢?你可能会想到2>>&1。。。然而现实是,并没有这个语法。

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

echo "asd" &>> a.txt &>>就是1跟2 都输入到a.txt

(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‘

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

(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





以上是关于重定向的主要内容,如果未能解决你的问题,请参考以下文章

302 登录重定向后被 IE 删除的 URL 片段

链接中的 URL 片段和 JSF 中的 ajax 重定向

使用片段 (#) 重定向链接 - asp.net

在 PHP 重定向期间处理片段标识符

重定向时如何在 Safari 中保留 uri 片段?

Linkedin OAuth 2.0 重定向 URL 不能包含片段标识符 (#)