1、文件描述符
文件 | 文件描述符 |
输入文件 | 0 |
输出文件 | 1 |
错误输出文件 | 2 |
2、将标准输出和错误输出重定向到同一个文件:2>&1
kevin@kevin:~/mybash$ cat test.sh
#/usr/bin/bash
name=kevin
echo $name
ipconfig
kevin@kevin:~/mybash$ ./test.sh > run.log
./test.sh: line 5: ipconfig:找不到命令
kevin@kevin:~/mybash$ ./test.sh > run.log 2>&1
kevin@kevin:~/mybash$ cat run.log
kevin
./test.sh: line 5: ipconfig:找不到命令
kevin@kevin:~/mybash$
3、将错误单独输出到文件
kevin@kevin:~/mybash$ ./test.sh 2>err.log
kevin
kevin@kevin:~/mybash$ cat err.log
./test.sh: line 5: ipconfig:找不到命令
kevin@kevin:~/mybash$
4、将错误输出到系统垃圾箱/dev/null,从而错误不出现在命令行界面上
kevin@kevin:~/mybash$ ./test.sh 2>/dev/null
kevin
kevin@kevin:~/mybash$
1.Linux常用的有:
1) 标准输入 stdin 代码为0,使用< 或<<
2) 标准输出 stdout 代码为1,使用> 或 >> ,这里把1给省略了,
3) 标准错误输出 stderr代码为2,使用 2> 或2>>
其中:标准输出指的是『命令运行所回传的正确的信息』,而标准错误输出可理解为『命令运行失败后,所回传的错误信息』
2.如果想让信息都不展示,则将输入到黑洞垃圾桶/dev/null,不输出错误信息2>/dev/null
3.标准输出标准错误输出都放在同一个文件,就这样做:
1)都重定向到标准输出通道&1:2>&1,都重定向到标准错误输出通道1>&2,可以简写为>&2,还可以是 >& 这里的&可以理解成”the same as”
为何2>&1要写在后面?
index.php task testOne >/dev/null 2>&1
我们可以理解为,左边是标准输出,好,现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中。
可以理解为,如果写在中间,那会把隔断标准输出指定输出的文件
你可以用
ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。