熟悉几个特殊符号:python
< :输入重定向 > :输出重定向 >> :输出重定向,进行追加,不会覆盖以前内容 << :标准输入来自命令行的一对分隔号的中间内容.
示例:shell
1.cat >file 记录的是键盘输入,至关于从键盘建立文件,而且只能建立新文件,不能编辑已有文件.>是数据重导向,会将你输入的文本内容输出到file中. cat >file < 两条命令结合起来使用,既记录了键盘输入内容,同时又规定告终束符号以内的内容的范围 xargs -n 1 < qqq <<EOF就是告诉shell脚本如今开始执行命令,当遇到EOF的时候结束命令。 !跟命令指上一次的命令
而后是 1>、 2>、 1>>、 2>>的使用,命令行
当咱们须要把一个文件正确的输出,和错误的输出分开保存的时候就能用到他们啦。让我用一个简单的python脚原本作一个实验code
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 。ip
那么若是咱们不区分1>2>这样的重定向规则,运行结果会被保存成什么样子呢?rpc
[root@hbl_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' [root@hbl_test houbinglei]# cat log.txt 111
那若是咱们想让错误和正确的结果都被重定向到同一个文件又应该怎么作呢。it
[root@hbl_test houbinglei]# python test.py 1 > log.txt 2>&1 [root@hbl_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。。。然而现实是,并无这个语法。pip
然而咱们却能够使用1>>pp.txt 2>&1的语法实现这个功能io
echo "asd" &>> a.txt &>>就是1跟2 都输入到a.txtevent
(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