shell上手中,shell命令执行,正常输出可以获得,但对于出错信息,如何获取没能解决。今天查了一天资料,算是找着了一个切换输出的办法。就是exec函数。

man exec可以看到其有一些参数可以用:

< fileName

打开以fileName命名的文件作为标准输入为第一个命令。

<< value

以Value作为第一个命令的标准输入。

​> fileName

最后一个标准结果输出覆盖输出到fileName文件

​2> fileName

所有命令的错误输出覆盖输出到fileName文件

​>& fileName最后一个标准结果输出和所有命令的错误输出覆盖输出到fileName文件

>> fileName最后一个标准结果输出追加输出到fileName文件

​2>> fileName所有命令的错误输出追加输出到fileName文件

>>& fileName

最后一个标准结果输出和所有命令的错误输出追加输出到fileName文件

eg:

hadoop fs -ls XXX

如果执行该命令,假定XXX是不存在的,那么结果为:

1、16/05/28 19:41:45 INFO hdfs.PeerCache: SocketCache

disabled.

2、ls: `aaa': No such file or directory

1、不是结果,是提示,2是错误信息。如果正常情况下获取输出,1是获取不到的,2是出错信息也获取不到。

但如果XXX存在,那么2就是文件的大小信息等,作为结果是可以获取到的。

设置exec 2>>

file1,那么在出错情况下,上述1、2都会追加到file1的末尾,如果执行成功,1追加到file1末尾,正确的2作为结果可以被获取到。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐