Linux:标准输入、输出、错误



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了。



不积跬步,无以至千里;不积小流,无以成江海。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值